pre_wp_nav_menu
Позволяет изменить вывод функции wp_nav_menu() на раннем этапе, до работы основного кода функции.
Позволяет до начала формирования меню оборвать выполнения функции wp_nav_menu(), или дать ей уже сгенерированный html код, который сразу же будет выведен на экран или возвращён, в зависимости от параметра $args->echo
.
Использование
add_filter( 'pre_wp_nav_menu', 'wp_kama_pre_wp_nav_menu_filter', 10, 2 ); /** * Function for `pre_wp_nav_menu` filter-hook. * * @param string|null $output Nav menu output to short-circuit with. * @param stdClass $args An object containing wp_nav_menu() arguments. * * @return string|null */ function wp_kama_pre_wp_nav_menu_filter( $output, $args ){ // filter... return $output; }
- $output(строка/null)
Значение, которое определяет, как поведет себя функция wp_nav_menu() дальше.
- Если
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; }
Список изменений
С версии 3.9.0 | Введена. |
Где вызывается хук
pre_wp_nav_menu
wp-includes/nav-menu-template.php 113
$nav_menu = apply_filters( 'pre_wp_nav_menu', null, $args );