Cum să modifici meniul de navigare al paginii "Contul meu" în WooCommerce
Vreau să modific meniul de navigare din partea stângă a paginii "Contul meu" din WooCommerce.
Pentru asta, am făcut modificări în woocommerce/templates/myaccount/navigation.php
.
Problemele cu această abordare sunt:
- Pot adăuga elementele noi doar pe prima sau ultima poziție în meniu. În schimb, aș avea nevoie de ele pe poziția a 2-a și a 3-a....
- Dacă WC este actualizat, acestea s-ar putea schimba...
Care este cea mai bună modalitate de a personaliza meniul de navigare "Contul meu" din WooCommerce după preferințele mele?

Pentru asta, nu este nevoie să modifici fișierul woocommerce/templates/myaccount/navigation.php
.
Cea mai bună metodă de a personaliza elementele din meniul de navigare "Contul meu" este să folosești:
- Filtrul
woocommerce_account_menu_items
pentru a adăuga elemente noi în meniu. array_slice()
pentru a le reordona după preferințe.
Prin utilizarea filtrului woocommerce_account_menu_items
, integrezi perfect elementele tale în WooCommerce, având avantajele:
- Posibilitatea de a redefini endpoint-urile personalizate prin pagina de setări "Cont" din WooCommerce.
- WooCommerce actualizează automat URL-urile linkurilor la modificări ale structurii de permalinkuri.
Exemplu de cod:
// Prioritatea scăzută a hook-ului asigură că alte plugin-uri pot adăuga propriile elemente...
add_filter( 'woocommerce_account_menu_items', 'add_my_menu_items', 99, 1 );
function add_my_menu_items( $items ) {
$my_items = array(
// endpoint => etichetă
'2nd-item' => __( 'Al 2-lea Element', 'my_plugin' ),
'3rd-item' => __( 'Al 3-lea Element', 'my_plugin' ),
);
$my_items = array_slice( $items, 0, 1, true ) +
$my_items +
array_slice( $items, 1, count( $items ), true );
return $my_items;
}
Notă 1: WooCommerce generează automat URL-urile elementelor conform acestui mecanism, adăugând endpoint-ul definit în filtrul de mai sus la URL-ul paginii "Contul meu". Definiți endpoint-urile în consecință.
Notă 2: Se pare că ai modificat direct șablonul WooCommerce în nucleu...
woocommerce/templates/myaccount/navigation.php
Când este necesar să modifici un șablon WooCommerce, copiază calea relativă la folderul woocommerce/templates
în tema/plugin-ul tău. De exemplu:
tema-copil/woocommerce/myaccount/navigation.php
.

Salut, încerc această metodă, adăugând codul în functions.php, dar primesc link-uri doar în navigația de sus, nu și în meniul lateral, ai vreo sugestie?

Personalizarea contului WooCommerce și adăugarea de elemente noi se face în câteva pași,
Primul pas: Crearea link-urilor:
Ar trebui să folosești filtrul woocommerce_account_menu_items
pentru a modifica elementele existente sau pentru a adăuga elemente noi în meniu, de exemplu am adăugat un element numit Listă de dorințe
add_filter( 'woocommerce_account_menu_items', function($items) {
$items['wishlist'] = __('Listă de dorințe', 'textdomain');
return $items;
}, 99, 1 );
Notă: Am ales cea mai simplă metodă, poți folosi array_slice dacă dorești să plasezi elementul în meniu în poziția dorită.
P.s: Dacă dorești să elimini sau să modifici elementele existente, poți face astfel:
add_filter( 'woocommerce_account_menu_items', function($items) {
unset($items['downloads']); // Elimină elementul pentru descărcări
$items['orders'] = __('Comenzile mele', 'textdomain'); // Schimbă eticheta pentru comenzi
return $items;
}, 99, 1 );
Pasul 2: Adaugă endpoint-uri rewrite:
Pentru fiecare element pe care îl adaugi, va trebui să adaugi un endpoint:
add_action( 'init', function() {
add_rewrite_endpoint( 'wishlist', EP_ROOT | EP_PAGES );
// Repetă linia de mai sus pentru mai multe elemente ...
} );
Ține minte că după ce adaugi endpoint-uri noi, trebuie să reîncarci regulile de rewrite fie mergând la wp-admin/settings/permalinks și făcând click pe butonul actualizează, fie folosind funcția flush_rewrite_rules()
.
Pasul 3: Afișează conținutul pentru noul element
Pentru a afișa conținutul pentru elementele nou adăugate, ar trebui să folosești acțiunea woocommerce_account_{myEndPoint}_endpoint
, pentru exemplul nostru am creat un fișier numit wishlist.php
în directorul temei mele, sub woocommerce/myaccount/
și îi afișez conținutul astfel:
add_action( 'woocommerce_account_wishlist_endpoint', function() {
wc_get_template_part('myaccount/wishlist');
});

De asemenea, este util să folosești funcția register_activation_hook()
pentru a înregistra o metodă de activare care să apeleze flush_rewrite_rules()
, astfel încât să nu ștergi în mod repetat regulile la încărcarea paginii și să nu fie nevoie să-ți amintești să salvezi permalinkurile. În acest fel, va rula doar o singură dată la activare și va "funcționa automat". Nu uita totuși să faci add_rewrite_endpoint()
înainte, pentru a te asigura că este înregistrat.
