php WooCommerce: मेरे खाते पृष्ठों में एक कस्टम टेम्पलेट के लिए एक समापन बिंदु असाइन करना




wordpress templates (2)

यह फ़ंक्शन "मेरा खाता" टैब सूची में "विशेष पृष्ठ" नामक एक टैब को जोड़ता है:

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

इसके परिणामस्वरूप:

लेकिन यह लिंक my-account/special-page/ इंगित करता है, और स्वाभाविक रूप से एक 404 त्रुटि देता है

मैं कैसे special-page.php नामक फ़ाइल में यह यूआरएल निर्दिष्ट कर सकता special-page.php ?


पहले 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 );
}

फिर wc_get_template को अपनी फ़ाइलें कॉल करने के लिए फ़िल्टर 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;
}

यदि आप बाल विषय का उपयोग करते हैं, तो get_template_directory() को get_template_directory() से get_stylesheet_directory() ... इस कोड को अपने सक्रिय बाल थीम या थीम के function.php फ़ाइल में चिपकाएं।

अद्यतन: अंत में Dario एक काम कर समाधान मिल गया है उसका जवाब देखें

संदर्भ:


आखिरकार मैं वूइकोर्स के उसी लोगों के लिए दिए गए स्निपेट का उपयोग कर समस्या को हल कर सकता हूं (उस पृष्ठ में अधिक सुझाव हैं)। किसी भी इच्छुक के लिए, कार्यक्षेत्रों में सभी निम्न कोड पेस्ट करें:

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( 'after_switch_theme', 'my_custom_flush_rewrite_rules' );

मुझे लगता है कि इस तरह से मेन्यू के आदेश / नाम बदलने के लिए अधिक नियंत्रण की अनुमति है:

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' );

निम्नलिखित फ़ंक्शन में मैंने कुछ "ऑर्डर" बनाए रखने के लिए फ़ाइल को शामिल किया था, लेकिन यह भी सीधा कोड स्वीकार करता है।

special-page.php फ़ोल्डर में special-page.php फ़ाइल को special-page.php रखें।

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

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

महत्वपूर्ण: एक बार ऐसा हुआ, थीम निष्क्रिय / पुनः सक्रिय करें (रीलाइट नियम को फ्लश करने के लिए)

स्रोत: टैब्ड माय अकाउंट पेज





account