WordPress как на ладони
Шаблоны, плагины и темы для настоящих поклонников Elementor. От TemplateMonster.com wordpress jino

pre_wp_nav_menu хук-фильтр . WP 3.9.0

Позволяет изменить вывод функции 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() дальше.

  • Если 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;
}

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

wp_nav_menu() остальные хуки:

Код хука-фильтра pre_wp_nav_menu

Фрагмент из: wp-includes/nav-menu-template.php VER 4.9.8
...

	/**
	 * 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 3045youtube.com/c/wpplus
Создатель YouTube канала wp-plus, на котором делюсь своим опытом. Активный пользователь wp-kama.ru. WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.
Комментариев нет
    Здравствуйте, !     Войти . Зарегистрироваться