2016-06-26 16 views
11

Questa funzione aggiunge una scheda denominata "pagina speciale" in "My Account" Lista scheda:WooCommerce: Assegnazione di un endpoint per un modello personalizzato in mio account pagine

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

che si traduce in questo:

enter image description here

Ma il collegamento punta a my-account/special-page/ e fornisce naturalmente un errore 404.

Come posso assegnare questo URL a un file denominato special-page.php?

+0

è "speciale-page.php" una pagina modello woocommerce personalizzato che si trova nel vostro tema attivo> cartella-conto woocommerce>? – LoicTheAztec

+0

Sì, lo è, esattamente :) –

risposta

20

Finalmente ho potuto risolvere il problema utilizzando un frammento provided for the same people of WooCommerce (Ci sono più punte in quella pagina). Per chiunque sia interessato, incollare tutto il codice riportato di seguito 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('after_switch_theme', 'my_custom_flush_rewrite_rules'); 

Penso che in questo modo permette un maggiore controllo per l'ordine/rinominare il 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'); 

Nella seguente funzione Ho incluso il file mantenere qualche "ordine", ma ammette anche il codice diretto.

Assicurarsi di posizionare il file special-page.php nella cartella myaccount.

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

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

Importante: Una volta fatto questo, disattivare/riattivare il tema (per filo le regole di riscrittura).

Fonte: Tabbed My Account page

+0

ha funzionato solo in localhost, ora sto testando questo online ei clienti mi stanno costringendo a farlo funzionare oggi! – Amine

+4

thx per la soluzione. Suggerimento: cambia il hook "after_switch_theme" con qualsiasi altro hook di intestazione "wp_loaded" - per esempio. E funzionerà senza temi swithing. – WebArtisan

+0

Vai a Dashboard> Impostazioni> Permalink e fai clic su "Salva impostazioni" potrebbe essere più facile per lo svuotamento delle regole di riscrittura. – optimiertes

4

Il primo my-account/special-page/ deve essere myaccount/special-page/ in woocommerce 2.6+.

Questa soluzione è incompleta e sto ancora lavorando ...

È possibile utilizzare prima questo gancio:

add_action('init', 'add_wc_endpoint'); 
function add_wc_endpoint(){ 
    add_rewrite_endpoint('special-page', EP_ROOT | EP_PAGES); 
} 

Poi filtrare wc_get_template di chiamare i tuoi file quando la richiesta di abbinare il vostro punto finale:

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

Se si utilizza un tema figlio, sostituire get_template_directory() per get_stylesheet_directory() ... Incollare questo codice nel file function.php del proprio tema o tema del bambino attivo.

Per evitare una "pagina non trovata" errore 404, è necessario aggiornare le regole di riscrittura aggiungendo al codice:

flush_rewrite_rules(); 

Aggiornamento: Finalmente Dario ha trovato una soluzione di lavoro Guarda la sua risposta.

Riferimenti:

+0

Ciao. Ho fatto lo stesso come nella soluzione di cui sopra, ma sto ottenendo un errore 404 pagina non trovata. C'è qualcosa che deve essere aggiornato in wordpress 4? –

+0

Le regole di riscrittura di risciacquo dalla pagina Permalinks non sono state d'aiuto. Sebbene aggiungendo flush_rewrite_rules(); nel codice ha fatto il trucco. Grazie per il suggerimento –

+1

@AkashAgrawal Ok ho aggiunto questo alla fine di questa risposta. Grazie – LoicTheAztec

Problemi correlati