-
-
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