Dar*_*rer 16 php account wordpress templates woocommerce
此功能将名为"特殊页面"的选项卡添加到"我的帐户"选项卡列表中:
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;
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
但链接指向my-account/special-page/,并自然给出404错误.
我如何将此URL分配给名为special-page.php?的文件?
Dar*_*rer 24
最后,我可以使用为WooCommerce的相同人员提供的代码段来解决问题(该页面中有更多提示).对于任何感兴趣的人,请在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' );
Run Code Online (Sandbox Code Playgroud)
我认为这种方式允许更多控制命令/重命名菜单:
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' );
Run Code Online (Sandbox Code Playgroud)
在下面的函数中,我包含了文件来维护一些"顺序",但它也承认直接代码.
务必将special-page.php文件放在myaccount文件夹中.
function my_custom_endpoint_content() {
    include 'woocommerce/myaccount/special-page.php'; 
}
add_action( 'woocommerce_account_special-page_endpoint', 'my_custom_endpoint_content' );
Run Code Online (Sandbox Code Playgroud)
重要提示:执行此操作后,转到控制板>设置>永久链接,然后单击"保存设置"以刷新重写规则(感谢@optimiertes)
来源:选项卡我的帐户页面
首先my-account/special-page/应该myaccount/special-page/在 woocommerce 2.6+ 中。
此解决方案不完整,我仍在努力……
你可以先使用这个钩子:
add_action( 'init', 'add_wc_endpoint' );
function add_wc_endpoint(){
    add_rewrite_endpoint( 'special-page', EP_ROOT | EP_PAGES );
}
Run Code Online (Sandbox Code Playgroud)
然后过滤wc_get_template以在请求与您的端点匹配时调用您的文件:
add_filter( 'wc_get_template', 'custom_vc_endpoint', 10, 5 );
function custom_vc_endpoint($located, $template_name, $args, $template_path, $default_path){
    if( $template_name == 'myaccount/special-page.php' ){
        global $wp_query;
        if(isset($wp_query->query['special-page'])){
            $located = get_template_directory() . '/woocommerce/myaccount/special-page.php';
        }
    }
    return $located;
}
Run Code Online (Sandbox Code Playgroud)
如果您使用子主题,请替换get_template_directory()为get_stylesheet_directory()... 将此代码粘贴到活动子主题或主题的 function.php 文件中。
为避免404 错误“找不到页面”,您需要刷新添加到代码中的重写规则:
flush_rewrite_rules();
Run Code Online (Sandbox Code Playgroud)
参考:
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           21071 次  |  
        
|   最近记录:  |