This function adds a tab named "Special Page" into "My Account" tab list:
add_filter( 'woocommerce_account_menu_items' , 'jc_menu_panel_nav' );
function jc_menu_panel_nav() {
$items = array(
'dashboard' => __( 'Dashboard', 'woocommerce' ),
'orders' => __( 'Orders', 'woocommerce' ),
'downloads' => __( 'Downloads', 'woocommerce' ),
'edit-address' => __( 'Addresses', 'woocommerce' ),
'payment-methods' => __( 'Payment Methods', 'woocommerce' ),
'edit-account' => __( 'Account Details', 'woocommerce' ),
'special-page' => __( 'Special Page', 'woocommerce' ), // My custom tab here
'customer-logout' => __( 'Logout', 'woocommerce' ),
);
return $items;
}
That results in this:
But the link points to my-account/special-page/
, and naturally gives a 404 error.
How I can assign this URL to a file named special-page.php
?
There is a better way to use a template in your custom page in woocommerce:
this should work without using the wc_get_template filter.
Finally I could solve the problem using a snippet provided for the same people of WooCommerce (There are more tips in that page). For anyone interested, paste all the following code in functions.php:
I think this way allows more control to order/renaming the menu:
In the following function I included the file to maintain some "order", but it also admits direct code.
Be sure to place the
special-page.php
file in themyaccount
folder.Source: Tabbed My Account page
First
my-account/special-page/
should bemyaccount/special-page/
in woocommerce 2.6+.This solution is Incomplete and I am still working On…
You can use first this hook:
Then filtering
wc_get_template
to call your files when the request match your endpoint:If you use a child theme, replace
get_template_directory()
byget_stylesheet_directory()
… Paste this code in function.php file of your active child theme or theme.To avoid a 404 error "page not found", you will need to refresh rewrite rules adding to your code:
References: