WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

wp_nav_menu_args хук-фильтр . WP 3.0.0

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

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

add_filter( 'wp_nav_menu_args', 'filter_function_name_3881' );
function filter_function_name_3881( $args ){
	// Делаем что-либо...

	return $args;
}
$args(массив)
Массив аргументов.

Примеры

#1 Изменим параметры у всех меню одновременно

add_filter( 'wp_nav_menu_args', 'change_nav_menu_args' );

function change_nav_menu_args( $args ) {
	$args['fallback_cb']  = false;
	$args['menu_class']   = 'parent-menu';
	$args['item_spacing'] = 'discard';

	return $args;
}

#2 Изменим параметры у определенного меню

Изменим некоторые параметры только у меню, которое выводится в области меню header-menu.

add_filter( 'wp_nav_menu_args', 'change_nav_menu_args' );

function change_nav_menu_args( $args ) {
	if ( $args['theme_location'] === 'header-menu' ) {
		$args['fallback_cb']  = false;
		$args['menu_class']   = 'parent-menu';
		$args['item_spacing'] = 'discard';
	}

	return $args;
}

Где вызывается хук

wp_nav_menu()
wp_nav_menu_args
wp-includes/nav-menu-template.php 87
$args = apply_filters( 'wp_nav_menu_args', $args );

Где используется хук (в ядре WP)

wp-includes/class-wp-customize-nav-menus.php 1256
add_filter( 'wp_nav_menu_args', array( $this, 'filter_wp_nav_menu_args' ), 1000 );
campusboy 3317youtube.com/c/wpplus
Создатель YouTube канала wp-plus, на котором делюсь своим опытом. Активный пользователь wp-kama.ru. WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.
1 коммент
  • @ mxm2

    Всем привет!

    Сделал по примеру: #2 Изменим параметры у определенного меню :

    //1 фильтр, для меню 1
    function underscores_filter_wp_nav_menu_args( $args )
    {
    	if ( $args['theme_location'] === 'menu-1' )
    		{
    			$args['container']  = '';
    			$args['menu_class'] = 'menu-nav menu-nav-1';
    			$args['menu_id'] = 'menu-menu-2';
    		}
    	return $args;
    }
    add_filter( 'wp_nav_menu_args', 'underscores_filter_wp_nav_menu_args' );
    
    //2 фильтр, для меню 2
    function underscores_filter_wp_nav_menu_args_mobile_menu( $args )
    {
    	if ( $args['theme_location'] === 'mobile-menu' )
    		{
    			$args['container']  = 'ul';
    			$args['menu_class'] = 'menu-mobile';
    			$args['menu_id'] = 'menu-menu-1';
    		} 
    	return $args;
    }
    add_filter( 'wp_nav_menu_args', 'underscores_filter_wp_nav_menu_args_mobile_menu' );

    Но, если добавить виджет меню в sidebar, то вообще не понятно - какое меню туда добавляется и как его фильтрами "заточить" под нужную вёрстку.

    Если в вышеуказанном коде убрать проверку 'menu-1', то виджет меню принимает параметры данного фильтра. Как отвязать - не получается. Если кто знает, поделитесь, пжлста!

    На данный момент, отказался использовать виджет меню в сайдбаре. Сделал третье меню.

    1
    Ответитьмесяц назад #
Здравствуйте, !     Войти . Зарегистрироваться