-
-
Save neilgee/13ac00c86c903c4ab30544b2b76c483c to your computer and use it in GitHub Desktop.
| <?php | |
| /* | |
| Plugin Name: WooCustom My Account | |
| Plugin URI: http://wpbeaches.com/ | |
| Description: WooCustom - add a custom area in my-account | |
| Author: Neil Gee | |
| Version: 1.0.0 | |
| Author URI: http://wpbeaches.com | |
| License: GPL-2.0+ | |
| License URI: http://www.gnu.org/licenses/gpl-2.0.txt | |
| Text Domain: woocustom | |
| Domain Path: /languages/ | |
| */ | |
| /* | |
| * Add custom endpoint that appears in My Account Page - WooCommerce 2.6 | |
| * New URL below as Claudio changed his github username | |
| * Ref - https://gist.github.com/claudiosanches/a79f4e3992ae96cb821d3b357834a005#file-custom-my-account-endpoint-php | |
| */ | |
| class My_Custom_My_Account_Endpoint { | |
| /** | |
| * Custom endpoint name. | |
| * | |
| * @var string | |
| */ | |
| public static $endpoint = 'my-custom-endpoint'; | |
| /** | |
| * Plugin actions. | |
| */ | |
| public function __construct() { | |
| // Actions used to insert a new endpoint in the WordPress. | |
| add_action( 'init', array( $this, 'add_endpoints' ) ); | |
| add_filter( 'query_vars', array( $this, 'add_query_vars' ), 0 ); | |
| // Change the My Accout page title. | |
| add_filter( 'the_title', array( $this, 'endpoint_title' ) ); | |
| // Insering your new tab/page into the My Account page. | |
| add_filter( 'woocommerce_account_menu_items', array( $this, 'new_menu_items' ) ); | |
| add_action( 'woocommerce_account_' . self::$endpoint . '_endpoint', array( $this, 'endpoint_content' ) ); | |
| } | |
| /** | |
| * Register new endpoint to use inside My Account page. | |
| * | |
| * @see https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/ | |
| */ | |
| public function add_endpoints() { | |
| add_rewrite_endpoint( self::$endpoint, EP_ROOT | EP_PAGES ); | |
| } | |
| /** | |
| * Add new query var. | |
| * | |
| * @param array $vars | |
| * @return array | |
| */ | |
| public function add_query_vars( $vars ) { | |
| $vars[] = self::$endpoint; | |
| return $vars; | |
| } | |
| /** | |
| * Set endpoint title. | |
| * | |
| * @param string $title | |
| * @return string | |
| */ | |
| public function endpoint_title( $title ) { | |
| global $wp_query; | |
| $is_endpoint = isset( $wp_query->query_vars[ self::$endpoint ] ); | |
| if ( $is_endpoint && ! is_admin() && is_main_query() && in_the_loop() && is_account_page() ) { | |
| // New page title. | |
| $title = __( 'My Stuff', 'woocommerce' ); | |
| remove_filter( 'the_title', array( $this, 'endpoint_title' ) ); | |
| } | |
| return $title; | |
| } | |
| /** | |
| * Insert the new endpoint into the My Account menu. | |
| * | |
| * @param array $items | |
| * @return array | |
| */ | |
| public function new_menu_items( $items ) { | |
| // Remove the logout menu item. | |
| $logout = $items['customer-logout']; | |
| unset( $items['customer-logout'] ); | |
| // Insert your custom endpoint. | |
| $items[ self::$endpoint ] = __( 'My Stuff', 'woocommerce' ); | |
| // Insert back the logout item. | |
| $items['customer-logout'] = $logout; | |
| return $items; | |
| } | |
| /** | |
| * Endpoint HTML content. | |
| */ | |
| public function endpoint_content() { | |
| ?> | |
| <div class="woocommerce-MyAccount-content"> | |
| <p>Hello World! - custom field can go here</p> | |
| </div> | |
| <?php | |
| } | |
| /** | |
| * Plugin install action. | |
| * Flush rewrite rules to make our custom endpoint available. | |
| */ | |
| public static function install() { | |
| flush_rewrite_rules(); | |
| } | |
| } | |
| new My_Custom_My_Account_Endpoint(); | |
| // Flush rewrite rules on plugin activation. | |
| register_activation_hook( __FILE__, array( 'My_Custom_My_Account_Endpoint', 'install' ) ); |
| <?php | |
| /* | |
| * Change the entry title of the endpoints that appear in My Account Page - WooCommerce 2.6 | |
| * Using the_title filter | |
| */ | |
| function wpb_woo_endpoint_title( $title, $id ) { | |
| if ( is_wc_endpoint_url( 'downloads' ) && in_the_loop() ) { // add your endpoint urls | |
| $title = "Download MP3s"; // change your entry-title | |
| } | |
| elseif ( is_wc_endpoint_url( 'orders' ) && in_the_loop() ) { | |
| $title = "My Orders"; | |
| } | |
| elseif ( is_wc_endpoint_url( 'edit-account' ) && in_the_loop() ) { | |
| $title = "Change My Details"; | |
| } | |
| return $title; | |
| } | |
| add_filter( 'the_title', 'wpb_woo_endpoint_title', 10, 2 ); |
| <?php | |
| /* | |
| * Change the order of the endpoints that appear in My Account Page - WooCommerce 2.6 | |
| * The first item in the array is the custom endpoint URL - ie http://mydomain.com/my-account/my-custom-endpoint | |
| * Alongside it are the names of the list item Menu name that corresponds to the URL, change these to suit | |
| */ | |
| function wpb_woo_my_account_order() { | |
| $myorder = array( | |
| 'my-custom-endpoint' => __( 'My Stuff', 'woocommerce' ), | |
| 'edit-account' => __( 'Change My Details', 'woocommerce' ), | |
| 'dashboard' => __( 'Dashboard', 'woocommerce' ), | |
| 'orders' => __( 'Orders', 'woocommerce' ), | |
| 'downloads' => __( 'Download MP4s', 'woocommerce' ), | |
| 'edit-address' => __( 'Addresses', 'woocommerce' ), | |
| 'payment-methods' => __( 'Payment Methods', 'woocommerce' ), | |
| 'customer-logout' => __( 'Logout', 'woocommerce' ), | |
| ); | |
| return $myorder; | |
| } | |
| add_filter ( 'woocommerce_account_menu_items', 'wpb_woo_my_account_order' ); |
Same question here please :) How do we use all your php scripts ?
Hi Yahlhead91 You need to add this to your theme's functions.php file
I made a custom endpoint and added a form. How would I create a button that saves the data? This is what I used, when I added the form to my account details page - which worked fine, but I don't want to have the form under the user information (password,..): ` add_action( 'woocommerce_save_account_details', 'my_woocommerce_save_account_details' );
function my_woocommerce_save_account_details( $user_id ) {
update_user_meta( $user_id, 'arm', htmlentities( $_POST[ 'birthdate' ] ) );
}`
Thanks for this help.
What code do I need to add if I want two or three custom endpoints in my-account?
Please mentioned the line number as well where I should enter it.
Thanks in advance.
i copied the whole code in functions.php
i got MY STUFF menu in users myaccount page..
but when i click on it .. it's redirecting to home page.
should i create any page in woocommerce/myaccount/ ??
and should i write any extra code in that page ?
please can you guide me where i am wrong .
Thanks in advance.
when I install some other plugin like b2b king I got already to the sidebar menu in my account I want to change that position as well. So is it possible to change the positions?
Hi there thanks for this great work, i am pretty new to WordPress dev . I have used these files added them to plugins/woocommerce/includes directory. But they are taking no effect , sorry now if i sound like a total noob. But where am I going wrong . Thanks