Come modificare il menu di navigazione della pagina "Il mio account" in WooCommerce
Voglio modificare il menu di navigazione laterale di "Il mio account" di WooCommerce.
Per questo, ho fatto modifiche nel file woocommerce/templates/myaccount/navigation.php
.
I problemi con questo approccio sono:
- Posso aggiungere i nuovi elementi solo in prima o ultima posizione nel menu. Invece avrei bisogno di metterli in seconda e terza posizione...
- Se WC viene aggiornato, potrebbe cambiare...
Qual è il modo migliore per personalizzare il menu di navigazione "Il mio account" di WooCommerce secondo le mie esigenze?

Per fare ciò, non è necessario modificare il file woocommerce/templates/myaccount/navigation.php
.
Il modo migliore per personalizzare le voci del menu di navigazione "Il mio account" è utilizzare:
- Il filtro
woocommerce_account_menu_items
per aggiungere nuove voci al menu. - La funzione
array_slice()
per riordinarle come desideri.
In questo modo, utilizzando il filtro woocommerce_account_menu_items
, integri perfettamente le tue voci personalizzate in WooCommerce, infatti:
- Possibilità di ridefinire i tuoi endpoint personalizzati tramite la pagina delle impostazioni "Account" di WooCommerce.
- WooCommerce aggiorna automaticamente l'URL del link degli elementi quando, ad esempio, viene modificata la struttura dei permalink.
Esempio di codice:
// Nota la bassa priorità dell'hook, questo dovrebbe dare agli altri plugin il tempo di aggiungere le loro voci...
add_filter( 'woocommerce_account_menu_items', 'add_my_menu_items', 99, 1 );
function add_my_menu_items( $items ) {
$my_items = array(
// endpoint => etichetta
'2nd-item' => __( '2° Elemento', 'my_plugin' ),
'3rd-item' => __( '3° Elemento', 'my_plugin' ),
);
$my_items = array_slice( $items, 0, 1, true ) +
$my_items +
array_slice( $items, 1, count( $items ), true );
return $my_items;
}
Nota 1: L'URL del link delle tue voci è definito automaticamente da WooCommerce qui. Per farlo, WooCommerce semplicemente aggiunge l'endpoint dell'elemento definito nel filtro sopra all'URL della pagina "Il mio account". Quindi definisci i tuoi endpoint di conseguenza.
Nota 2: Nella tua domanda, sembra che tu abbia modificato direttamente il template di WooCommerce nel core...
woocommerce/templates/myaccount/navigation.php
Quando devi modificare un template di WooCommerce, il modo corretto per farlo è duplicare il percorso del template relativo alla cartella woocommerce/templates
nella cartella woocommerce
del tuo tema/plugin. Ad esempio nel nostro caso, dovresti incollare il template in:
child-theme/woocommerce/myaccount/navigation.php
.

Ciao, sto provando questo metodo, inserendo il codice nel file functions.php, ma ottengo i link solo nella navigazione superiore, non anche nel menu laterale, qualche suggerimento?

Personalizzare l'account WooCommerce e aggiungere nuovi elementi avviene in pochi passaggi,
Primo Passo: Creare i Link:
Dovresti usare il filtro woocommerce_account_menu_items
per modificare i menu esistenti o aggiungere nuove voci, ad esempio aggiungo una voce chiamata Lista dei Desideri
add_filter( 'woocommerce_account_menu_items', function($items) {
$items['wishlist'] = __('Lista dei Desideri', 'textdomain');
return $items;
}, 99, 1 );
Nota: Ho seguito il modo più semplice, puoi usare array_slice se vuoi posizionare la voce del menu dove preferisci.
P.s: Se vuoi rimuovere o modificare voci esistenti puoi farlo così:
add_filter( 'woocommerce_account_menu_items', function($items) {
unset($items['downloads']); // Rimuove la voce download
$items['orders'] = __('I Miei Ordini', 'textdomain'); // Cambia l'etichetta per ordini
return $items;
}, 99, 1 );
Passo 2: Aggiungere gli endpoint rewrite:
Per ogni voce che aggiungi dovrai creare un endpoint:
add_action( 'init', function() {
add_rewrite_endpoint( 'wishlist', EP_ROOT | EP_PAGES );
// Ripeti la riga sopra per altri elementi ...
} );
Ricorda che dopo aver aggiunto nuovi endpoint devi aggiornare le regole di rewrite andando in wp-admin/impostazioni/permalink e cliccando il pulsante aggiorna oppure usando la funzione flush_rewrite_rules()
Passo 3: Visualizzare il contenuto del nuovo elemento
Per mostrare il contenuto dei tuoi nuovi elementi dovresti usare l'azione woocommerce_account_{myEndPoint}_endpoint
, nel nostro esempio ho creato un file chiamato wishlist.php
nella directory del tema sotto woocommerce/account/
e ne mostro il contenuto così:
add_action( 'woocommerce_account_wishlist_endpoint', function() {
wc_get_template_part('account/wishlist');
});

È anche utile utilizzare la funzione register_activation_hook()
per registrare un metodo di attivazione che chiama flush_rewrite_rules()
in modo da non ripulire ripetutamente le regole al caricamento della pagina e per non dover ricordare di salvare i permalink. In questo modo verrà eseguito solo una volta all'attivazione e funzionerà "senza problemi". Ricorda però di fare add_rewrite_endpoint()
prima in modo che venga registrato.
