Tworzenie menu w WordPress za pomocą funkcji register_nav_menus()

Dla wszystkich webmasterów rozpoczynających tworzenie strony internetowej w WordPressie, funkcja register_nav_menus() jest narzędziem o wysokim priorytecie. Funkcja ta umożliwia tworzenie niestandardowych menu nawigacyjnych w pliku funkcji motywu oraz szczególnie przydatna dla złożonych witryn, które wymagają wielu menu w różnych lokalizacjach.

Kluczowe aspekty funkcji:

  • Rejestrowanie wielu lokalizacji menu:
    • Dzięki register_nav_menus() możemy zdefiniować wiele różnych lokalizacji, w których mogą znajdować się nasze menu nawigacyjne. Na przykład możemy zarejestrować lokalizacje dla menu głównego, menu stopki, menu bocznego itp.
    • Każda lokalizacja jest identyfikowana za pomocą unikalnego klucza (np. “primary_menu”, “footer_menu”, “sidebar_menu”), który jest używany w kodzie do wyświetlania konkretnego menu.
  • Opis lokalizacji menu:
    • W funkcji register_nav_menus() możemy również przypisać opis do każdej lokalizacji. Opis ten może pomóc innym osobom (np. innym programistom lub administratorom) zrozumieć, do czego służy dana lokalizacja menu.
  • Automatyczne wsparcie dla menu:
    • Rejestrując lokalizacje menu za pomocą register_nav_menus(), automatycznie aktywujemy obsługę menu w motywie. Nie musimy już ręcznie dodawać wsparcia dla menu za pomocą add_theme_support('menus').
  • Użycie funkcji wp_nav_menu():
    • Po zarejestrowaniu lokalizacji menu możemy użyć funkcji wp_nav_menu() do wyświetlenia konkretnego menu w odpowiednim miejscu na stronie.
    • Funkcja wp_nav_menu() pozwala na dostosowanie wyglądu i zachowania menu, a także obsługuje różne opcje, takie jak sortowanie, wyświetlanie podmenu itp.

Wykorzystanie register_nav_menus() w functions.php

Poniżej znajduje się praktyczny przykład, który demonstruje, jak użyć funkcji register_nav_menus() w pliku functions.php do tworzenia niestandardowych menu nawigacyjnych:

// Rejestruje niestandardowe menu nawigacyjne
function custom_theme_navigation_menus() {
    register_nav_menus( array(
        'primary-menu' => esc_html__( 'Menu główne', 'text-domain' ),
        'footer-menu'  => esc_html__( 'Menu stopki', 'text-domain' ),
        'sidebar-menu' => esc_html__( 'Boczne menu', 'text-domain' ),
    ) );
}
add_action( 'init', 'custom_theme_navigation_menus' );

Szczegółowe omówienie kodu:

  • Funkcja custom_theme_navigation_menus() rejestruje trzy niestandardowe lokalizacje menu nawigacyjnych: “Menu główne”, “Menu stopki” i “Boczne menu”.
  • Każda lokalizacja jest identyfikowana za pomocą unikalnego klucza (np. “primary-menu”), który jest używany w kodzie do wyświetlania konkretnego menu.
  • Funkcja register_nav_menus() aktywuje obsługę menu w motywie WordPress, dzięki czemu możemy użyć funkcji wp_nav_menu() do wyświetlenia menu w odpowiednich miejscach na stronie.

W panelu administracyjnym, nowe niestandardowe menu nawigacyjne będzie wyglądać tak:

Tworzenie menu w WordPress za pomocą funkcji register_nav_menus()

Zaawansowany przykład tworzenia niestandardowych lokalizacji menu nawigacyjnych

Poniżej prezentuję bardziej zaawansowany przykład wykorzystania funkcji register_nav_menus() w WordPressie, który zawiera dodatkowe funkcje, takie jak warunkowa rejestracja menu w oparciu o role użytkowników:

// Rejestruje zaawansowane menu nawigacyjne
function register_advanced_menus() {
    if (current_theme_supports('menus')) {
        register_nav_menus(
            array(
                'header-menu' => __('Menu Główne', 'text-domain'),
                'footer-menu' => __('Menu Stopki', 'text-domain'),
                'social-menu' => __('Menu Społecznościowe', 'text-domain')
            )
        );

        if (current_user_can('editor') || current_user_can('administrator')) {
            register_nav_menus(
                array(
                    'editor-menu' => __('Menu Edytora', 'text-domain'),
                    'admin-menu' => __('Menu Administratora', 'text-domain')
                )
            );
        }
    }
}
add_action('after_setup_theme', 'register_advanced_menus');

Szczegółowe omówienie kodu:

  1. Funkcja register_advanced_menus() rejestruje zaawansowane lokalizacje menu nawigacyjnych, takie jak “Menu Główne”, “Menu Stopki” i “Menu Społecznościowe”.
  2. Jeśli użytkownik ma uprawnienia edytora lub administratora, zostaną również zarejestrowane lokalizacje “Menu Edytora” i “Menu Administratora”.
  3. Funkcja register_nav_menus() aktywuje obsługę menu w motywie WordPress, dzięki czemu możemy użyć funkcji wp_nav_menu() do wyświetlania menu w odpowiednich miejscach na stronie.

Menu w szablonie motywu

Po stworzeniu lokalizacji menu, należy je wyświetlić w odpowiednim miejscu. Do tego celu służy funkcja wp_nav_menu(), która umożliwia wyświetlenie określonego menu w szablonie (np. w pliku header.php, footer.php lub sidebar.php). Na przykład:

<nav class="main-menu">
    <?php
    wp_nav_menu(
        array(
            'theme_location' => 'header-menu',
            'menu_class'     => 'menu',
        )
    );
    ?>
</nav>