Last active
December 16, 2024 16:18
-
-
Save neilgee/13ac00c86c903c4ab30544b2b76c483c to your computer and use it in GitHub Desktop.
WooCommerce Endpoint Order and Rename - My Account Page v2.6+
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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' ) ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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 ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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' ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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?