Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
WooCommerce Endpoint Order and Rename - My Account Page v2.6+
<?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' );
@yawlhead91

This comment has been minimized.

Copy link

commented Aug 5, 2016

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

@tdeframond

This comment has been minimized.

Copy link

commented Aug 5, 2016

Same question here please :) How do we use all your php scripts ?

@TarnyaMumof8

This comment has been minimized.

Copy link

commented Aug 18, 2016

Hi Yahlhead91 You need to add this to your theme's functions.php file

@tamm1

This comment has been minimized.

Copy link

commented Dec 21, 2016

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' ] ) );
}`
@ravirich

This comment has been minimized.

Copy link

commented May 19, 2017

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.

@chaitu111

This comment has been minimized.

Copy link

commented Jul 23, 2017

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.