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 118
$nav_menu = apply_filters( 'pre_wp_nav_menu', null, $args );