Pre_wp_nav_menu — Позволяет изменить вывод функции wp_nav_menu() на раннем этапе, до работы основного кода функции. Хук-фильтр WordPress

Опубликовано: 20.01.2018

Позволяет изменить вывод функции wp_nav_menu() на раннем этапе, до работы основного кода функции.

Позволяет до начала формирования меню оборвать выполнения функции wp_nav_menu() , или дать ей уже сгенерированный html код, который сразу же будет выведен на экран или возвращён, в зависимости от параметра $args->echo.

Использование

add_filter( 'pre_wp_nav_menu', 'filter_function_name_8224', 10, 2 ); function filter_function_name_8224( $output, $args ){ // Делаем что-либо... return $output; } $output(строка/null)

Значение, которое определяет, как поведет себя функция wp_nav_menu() дальше.


Код wp_nav_menu(), хуки, хранение данных в БД и вспомогательные функции. Урок #3

Если null - продолжит выполнение. Если не null - прервёт остальное выполнение кода и возвратит переданное значение. Если был указан параметр echo = true, то результат будет выведет на экран.

По умолчанию: null

$args(stdClass) Объект с параметрами, переданными в wp_nav_menu() и слитые с дефолтными.

Примеры

#1 Вывести другое меню для авторизованных пользователей

Данный пример предполагает наличие двух областей меню: header-menu и header-menu-user-logged. Для неавторизованных пользователей будет выводится меню, прикрепленное к области header-menu, а для авторизованных - прикрепленное к области menu-user-logged.

// В header.php wp_nav_menu( [ 'theme_location' => 'header-menu', ] ); // В functions.php add_action( 'after_setup_theme', 'dev_menu_setup' ); function dev_menu_setup() { register_nav_menus( [ 'header-menu' => 'Верхнее меню', 'menu-user-logged' => 'Верхнее меню для авторизованных пользователей', ] ); } add_filter( 'pre_wp_nav_menu', 'change_pre_wp_nav_menu', 10, 2 ); function change_pre_wp_nav_menu( $output, $args ) { if ( $args->theme_location === 'header-menu' && is_user_logged_in() ) { wp_nav_menu( [ 'theme_location' => 'menu-user-logged', ] ); } return $output; }

Где используется хук

... /** * Filters whether to short-circuit the wp_nav_menu() output. * * Returning a non-null value to the filter will short-circuit * wp_nav_menu(), echoing that value if $args->echo is true, * returning that value otherwise. * * @since 3.9.0 * * @see wp_nav_menu() * * @param string|null $output Nav menu output to short-circuit with. Default null. * @param stdClass $args An object containing wp_nav_menu() arguments. */ $nav_menu = apply_filters( 'pre_wp_nav_menu', null, $args ); if ( null !== $nav_menu ) { if ( $args->echo ) { echo $nav_menu; return; } return $nav_menu; } // Get the nav menu based on the requested menu $menu = wp_get_nav_menu_object( $args->menu ); // Get the nav menu based on the theme_location if ( ! $menu && $args->theme_location && ( $locations = get_nav_menu_locations() ) && isset( $locations[ $args->theme_location ] ) ) ... campusboy 2826 — youtube.com/c/wpplus

Создатель YouTube канала wp-plus, на котором делюсь своими опытом. Активный пользователь wp-kama.ru. WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.

rss