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

后端 未结 4 1504
情深已故
情深已故 2020-11-27 21:11

This function adds a tab named \"Special Page\" into \"My Account\" tab list:

add_filter( \'woocommerce_account_menu_items\' , \'jc_menu_panel_nav\' );

func         


        
4条回答
  •  天涯浪人
    2020-11-27 21:35

    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

提交回复
热议问题