WordPress: Modyfikacja elementów menu za pomocą filtru wp_nav_menu_items

W dzisiej­szym artyku­le chciał­bym przed­sta­wić Wam filtr wp_​nav_​menu_​items, który pozwa­la na modyfi­ka­cję elemen­tów menu w WordPress. Jest to bardzo przydat­na funkcjo­nal­ność, która umożli­wia elastycz­ną manipu­la­cję elemen­ta­mi menu, takimi jak linki, etykie­ty czy atrybuty.

Wprowadzenie

Filtr wp_​nav_​menu_​items jest wywoły­wa­ny podczas genero­wa­nia menu nawiga­cyj­ne­go przez funkcję wp_​nav_​menu. Pozwa­la nam na zmianę tabli­cy elemen­tów menu przed jej wyświe­tle­niem. To świet­ne rozwią­za­nie, jeśli chcemy dodać niestan­dar­do­we linki, warun­ko­wo ukryć elemen­ty menu lub dosto­so­wać ich wygląd.

Przed omówie­niem argumen­tów funkcji, spójrz­my na przykład użycia filtru wp_nav_menu_items:

function custom_menu_items($items, $args) {
    // Modyfikacja elementów menu

    return $items;
}
add_filter('wp_nav_menu_items', 'custom_menu_items', 10, 2);

W funkcji custom_​menu_​items otrzy­mu­je­my dwa argumen­ty: $items i $args. Teraz przyj­rzyj­my się bliżej tym argumentom:

  1. $items (typ: string): Jest to ciąg teksto­wy zawie­ra­ją­cy elemen­ty menu w posta­ci znacz­ni­ków HTML. Możemy manipu­lo­wać tym ciągiem, dodając, usuwa­jąc lub modyfi­ku­jąc elemen­ty menu. Należy zauwa­żyć, że zmiany wprowa­dzo­ne w $items będą miały wpływ na wygene­ro­wa­ne menu.
  2. $args (typ: array): To tabli­ca argumen­tów menu przeka­zy­wa­nych do funkcji wp_​nav_​menu. Oto kilka kluczo­wych elemen­tów, które możemy znaleźć w tabli­cy $args:
    • 'theme_​location': Określa położe­nie tematycz­ne menu, do które­go jest przypi­sa­ny filtr. Możemy wykorzy­stać tę wartość, aby dosto­so­wać zacho­wa­nie menu dla różnych lokali­za­cji tematycznych.
    • 'menu': Obiekt WP_​Term repre­zen­tu­ją­cy menu. Możemy spraw­dzić jego właści­wo­ści, takie jak ID czy nazwa, i dosto­so­wać działa­nie filtru w zależ­no­ści od tych wartości.
    • 'conta­iner': Określa rodzaj elemen­tu konte­ne­ro­we­go dla menu, np. 'div' lub 'nav'. Możemy użyć tej warto­ści do dosto­so­wa­nia genero­wa­ne­go kodu HTML.

    Oczywi­ście, w tabli­cy $args znajdu­je się więcej elemen­tów, które możemy wykorzy­stać w zależ­no­ści od naszych potrzeb.

Teraz, kiedy już znamy argumen­ty funkcji wp_​nav_​menu_​items, możemy swobod­nie manipu­lo­wać elemen­ta­mi menu. Na przykład, możemy dodać niestan­dar­do­wy element do menu, ukryć określo­ne linki w zależ­no­ści od warun­ków, zmody­fi­ko­wać etykie­ty itp. Jedynym limitem jest nasza kreatywność!

Pamię­taj­my, że filtr wp_​nav_​menu_​items jest wywoły­wa­ny dla każde­go menu nawiga­cyj­ne­go na stronie. Dlate­go warto spraw­dzić wartość 'theme_​location' w tabli­cy $args, aby dosto­so­wać filtr do konkret­ne­go menu.

Przykłady zastosowania

  1. Dodawa­nie niestan­dar­do­we­go elemen­tu menu:
function custom_menu_items($items, $args) {
    // Dodanie niestandardowego elementu do menu
    $custom_item = '<li class="custom-menu-item"><a href="#">Niestandardowy link</a></li>';
    $items .= $custom_item;

    return $items;
}
add_filter('wp_nav_menu_items', 'custom_menu_items', 10, 2);

W tym przykła­dzie dodaje­my dodat­ko­wy niestan­dar­do­wy element menu (np. link) do istnie­ją­cej tabli­cy elemen­tów menu.

  1. Ukrywa­nie elemen­tów menu w zależ­no­ści od warunku:
function custom_menu_items($items, $args) {
    // Sprawdzenie warunku i ukrycie określonych elementów menu
    if (is_user_logged_in()) {
        $items = str_replace('class="private"', 'class="hidden"', $items);
    }

    return $items;
}
add_filter('wp_nav_menu_items', 'custom_menu_items', 10, 2);

W tym przykła­dzie używa­my funkcji is_​user_​logged_​in() do spraw­dze­nia, czy użytkow­nik jest zalogo­wa­ny. Jeśli tak, modyfi­ku­je­my klasę CSS elemen­tów menu i ukrywa­my je poprzez zamia­nę klasy "priva­te" na "hidden".

  1. Modyfi­ko­wa­nie etykiet elemen­tów menu:
function custom_menu_items($items, $args) {
    // Modyfikacja etykiet elementów menu
    $items = str_replace('Kontakt', 'Skontaktuj się z nami', $items);

    return $items;
}
add_filter('wp_nav_menu_items', 'custom_menu_items', 10, 2);

W tym przykła­dzie zmienia­my etykie­tę elemen­tu menu "Kontakt" na "Skontak­tuj się z nami" poprzez zamia­nę tekstu w tabli­cy elemen­tów menu.

Powyż­sze przykła­dy pokazu­ją różne możli­wo­ści modyfi­ka­cji elemen­tów menu za pomocą filtru wp_​nav_​menu_​items. Możesz dosto­so­wać je do swoich własnych potrzeb, dodając dodat­ko­we warun­ki, modyfi­ka­cje HTML itp.

Podsumowanie

Mam nadzie­ję, że ten artykuł pomoże Wam lepiej zrozu­mieć i wykorzy­stać filtr wp_​nav_​menu_​items w swoich projek­tach WordPress. Jest to potęż­ne narzę­dzie, które daje dużą swobo­dę przy tworze­niu niestan­dar­do­wych menu nawiga­cyj­nych. Jeśli macie jakieś pytania, śmiało pytajcie!

Dodaj komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.