Torna al blog

Come aggiungere/rimuovere/aggiornare le schede nella pagina "Il mio account" di WooCommerce

2022-02-053 min di lettura

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:

Pagina predefinita

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/