Come aggiungere/rimuovere/aggiornare le schede nella pagina "Il mio account" di WooCommerce
Il plugin WooCommerce dispone dello shortcode [woocommerce_my_account]
che può essere incorporato in qualsiasi pagina per visualizzare ai clienti loggati tutte le informazioni relative ai loro ordini passati, indirizzi, dettagli di pagamento e altro ancora, in base ai plugin installati sul sito. Lo shortcode restituisce i dati organizzati per schede e contenuti unici in ciascuna, come puoi vedere nell'immagine seguente:

Come possiamo rimuovere, modificare o aggiungere nuove schede?
Sì, un'opzione è utilizzare un plugin esistente e l'altra è scrivere alcune righe di PHP. Fornirò alcuni snippet PHP di seguito in modo che tu possa aggiungerli al tuo file functions.php e apportare le personalizzazioni necessarie. Stiamo utilizzando i seguenti hook di filtro di WordPress woocommerce_account_menu_items
e woocommerce_get_endpoint_url
Rimuovere schede
/**
* Rimuove il link pre-ordini dalla pagina "Il mio account".
* @param $menu_links
* @return array|string[]
*/
function my_site_remove_my_account_links( $menu_links ) {
// Rimuove la scheda pre-ordini dalla pagina "Il mio account".
// Questa scheda è creata dal plugin https://woocommerce.com/products/woocommerce-pre-orders/
unset( $menu_links['pre-orders'] );
// Di seguito puoi trovare le schede predefinite.
//unset( $menu_links['dashboard'] ); // Rimuove la scheda Dashboard.
//unset( $menu_links['orders'] ); // Rimuove la scheda Ordini.
//unset( $menu_links['edit-address'] ); // Scheda Indirizzi.
//unset( $menu_links['payment-methods'] ); // Rimuove la scheda Metodi di pagamento.
//unset( $menu_links['edit-account'] ); // Rimuove la scheda Dettagli account.
//unset( $menu_links['customer-logout'] ); // Rimuove il link di logout.
return $menu_links;
}
add_filter ( 'woocommerce_account_menu_items', 'my_site_remove_my_account_links' );
Aggiornare i titoli delle schede
/**
* Aggiorna il titolo delle schede nella pagina "Il mio account".
* @param $menu_links
* @return array|string[]
*/
function my_site_update_my_account_links( $menu_links ) {
// Aggiorna il testo per la scheda ordini.
$menu_links['orders'] = __('I miei ordini passati');
// Di seguito puoi trovare le schede predefinite.
// $menu_links['dashboard'] = __('Il tuo testo personalizzato per la Dashboard'); // Aggiorna il titolo della scheda Dashboard.
// $menu_links['edit-address'] = __('Il tuo testo personalizzato per gli indirizzi'); // Aggiorna il titolo della scheda Indirizzi.
// $menu_links['payment-methods'] =__('Il tuo testo personalizzato per i metodi di pagamento'); // Aggiorna il titolo della scheda Indirizzi.
// $menu_links['edit-account'] = __('Il tuo testo personalizzato per l'account'); // Aggiorna il titolo della scheda Indirizzi.
// $menu_links['customer-logout'] = __('Il tuo testo personalizzato per il logout'); // Aggiorna il titolo della scheda di logout.
return $menu_links;
}
add_filter ( 'woocommerce_account_menu_items', 'my_site_update_my_account_links' );
Aggiungere una scheda personalizzata, che collega a un URL interno/esterno
/**
* Aggiunge un nuovo link personalizzato alla pagina "Il mio account".
* @param $menu_links
* @return array|string[]
*/
function my_site_add_my_account_links( $menu_links ) {
// Decommenta queste righe se vuoi visualizzare la nuova scheda solo per un ruolo specifico.
// Ottieni l'utente corrente.
// $user = wp_get_current_user();
// if ( !in_array( 'MY_ROLE', (array) $user->roles ) ) {
// return $menu_links;
// }
// customendpoint sarà agganciato dal filtro woocommerce_get_endpoint_url.
$new = [ 'customendpoint' => __('La mia nuova scheda') ];
return array_slice( $menu_links, 0, 1, true )
+ $new
+ array_slice( $menu_links, 1, NULL, true );
}
add_filter ( 'woocommerce_account_menu_items', 'my_site_add_my_account_links' );
/**
* Imposta l'URL per l'endpoint customendpoint creato in woocommerce_account_menu_items
* @param $url
* @param $endpoint
* @param $value
* @param $permalink
* @return mixed|string
*/
function my_site_custom_endpoint( $url, $endpoint, $value, $permalink ) {
if ( $endpoint === 'customendpoint' ) {
$url = '/internal-url/';
// Puoi anche avere un URL esterno.
// $url = 'https://davidloor.com';
}
return $url;
}
add_filter( 'woocommerce_get_endpoint_url', 'my_site_custom_endpoint', 10, 4 );
Per una spiegazione completa della pagina "Il mio account" di WooCommerce, puoi visitare:
https://woocommerce.com/document/the-my-account-page/