WooCommerce: Assigning an endpoint to a custom template in my account pages

woocommerce my account css
customize woocommerce my account page
woocommerce_account_menu_items
my account page template
woocommerce change my account text
woocommerce account page hooks
woocommerce account page example
check if my account page woocommerce

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?


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:

function my_custom_endpoints() {
    add_rewrite_endpoint( 'special-page', EP_ROOT | EP_PAGES );
}

add_action( 'init', 'my_custom_endpoints' );

function my_custom_query_vars( $vars ) {
    $vars[] = 'special-page';

    return $vars;
}

add_filter( 'query_vars', 'my_custom_query_vars', 0 );

function my_custom_flush_rewrite_rules() {
    flush_rewrite_rules();
}

add_action( 'wp_loaded', 'my_custom_flush_rewrite_rules' );

I think this way allows more control to order/renaming the menu:

function my_custom_my_account_menu_items( $items ) {
    $items = array(
        'dashboard'         => __( 'Dashboard', 'woocommerce' ),
        'orders'            => __( 'Orders', 'woocommerce' ),
        //'downloads'       => __( 'Downloads', 'woocommerce' ),
        //'edit-address'    => __( 'Addresses', 'woocommerce' ),
        //'payment-methods' => __( 'Payment Methods', 'woocommerce' ),
        'edit-account'      => __( 'Edit Account', 'woocommerce' ),
        'special-page'      => 'Special Page',
        'customer-logout'   => __( 'Logout', 'woocommerce' ),
    );

    return $items;
}

add_filter( 'woocommerce_account_menu_items', 'my_custom_my_account_menu_items' );

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 the myaccount folder.

function my_custom_endpoint_content() {
    include 'woocommerce/myaccount/special-page.php'; 
}

add_action( 'woocommerce_account_special-page_endpoint', 'my_custom_endpoint_content' );

Important: Once did this, go to Dashboard > Settings > Permalinks and click "Save Settings" in order to flush rewrite rules (thanks @optimiertes)

Source: Tabbed My Account page

How to Add a Custom Page to the 'My Account' Area in WooCommerce, Add additional pages to your WooCommerce My Account area By adding new custom account pages that applies to all members, you Why don`t just use this hook, instead of endpoint checking on template redirect. Is "special-page.php" a custom woocommerce template page that is located in your active theme > woocommerce > my-account folder? – LoicTheAztec Jun 26 '16 at 17:38


Customize WooCommerce My Account page, Hi, is there a way to integrate WooCommerce My Account page with Assigned support staff: Shane. Unfortunately no this is not possible since this is an internal template that is being generated by woocommerce. I could and a new endpoint to the WooCommerce and then fill this endpoint with a  WooCommerce - Assign endpoints to multiple custom templates in my-account page. WooCommerce: Assigning an endpoint to a custom template in my account pages. WooCommerce: Adding custom template to customer account pages. Custom my account new menu item for a specific user role in Woocommerce. share.


There is a better way to use a template in your custom page in woocommerce:

function my_custom_endpoint_content() {
    wc_get_template( 'myaccount/special-page.php' ); 
}

add_action( 'woocommerce_account_special-page_endpoint', 'my_custom_endpoint_content' );

this should work without using the wc_get_template filter.

How to Add Custom Endpoints to My Account page in WooCommerce, In our theme's functions.php or plugin code, we first add our custom endpoint using add_rewrite_endpoint() . As first argument to this we provide  WooCommerce Account Page Custom Endpoint – In this post, we will see how we can add custom endpoint to my account page in front means one new our own page like order, download (default one’s). To do this, first we’ll add rewrite endpoint using WordPress function ‘add_rewrite_endpoint’ on ‘init’ hook.


You can add this code to your theme's function.php:

class My_Custom_My_Account_Endpoint {
/**
 * Custom endpoint name.
 *
 * @var string
 */
public static $endpoint = 'special-page';
/**
 * 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 = __( 'Special Page', '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 ] = __( 'Special Page', 'woocommerce' );
    // Insert back the logout item.
    $items['customer-logout'] = $logout;
    return $items;
}
/**
 * Endpoint HTML content.
 */
public function endpoint_content() {
    include('woocommerce/myaccount/special-page.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' ) );

If you don't know where is your theme's function.php:

1.Log in to the WordPress Admin interface 2.In the left sidebar, hover over Appearances, then click Theme Editor 3.In the right sidebar, click functions.php

Custom "My Account" endpoints · Issue #6210 · woocommerce , I've seen the need to add more data to "My Account". is easy because I added the 'woocommerce templates' in my theme Allow for plugins/themes to detect the custom endpoint to My Account page No one assigned. Include custom template file issue in Woocommerce my account page class My_Custom_My_Account_Endpoint { /** * Custom endpoint name. WooCommerce: Assigning an


WooCommerce, Please have a look of below code that will help you to add new tab in customer account page in woocommerce. function wet_account_menu_items( $items ) { Add custom menu item and endpoint to WooCommerce my-account page - add-custom-menu-item-and-endpoint-to-woocommerce-my-account-page.php


Tabbed “My Account” pages in 2.6 – Develop WooCommerce, Both of them are located in my theme > woocommerce > myaccount folder. Assigning an endpoint to a custom template in my account pages Here we’re going to outline how to add custom pages to the WooCommerce account area with a plugin. WooCommerce Account Pages allows you to add a new page or tab to the My Account area in WooCommerce. To get started, get your 14-day free trial of WooCommerce Account Pages from the Iconic store: iconicwp.comwoocommerce-account-pages


How To Make A Custom WooCommerce My Account Page, The "My Account" pages in WooCommerce are highly important for customers as it's Templates were changed, such as the my-account.php file, however we've maintained public static $endpoint = 'my-custom-endpoint';. Integrated with YITH WooCommerce Customize My Account Page the endpoint with PayPal Payout content is automatically added to my account page. YITH WooCommerce Request a Quote Thanks to YITH WooCommerce Request a Quote you can offer users the chance to ask for a quote for one or more products in your shop.