Intereting Posts
как установить ссылку на родительский форум на страницу меню? Как скрыть / показать изображение в сообщениях с помощью кнопки Thumbnail + Excerpt = потеря в количестве слов Переопределение крюка add-action Woocommerce вызывается дважды Лучшее изображение отсутствует в WordPress 3.2 Admin Пробелы перед Doctype получение всех значений пользовательской таксономии, если нет сообщений Архив для таксономии пользовательского типа сообщения Не удалось получить все действия (просмотр, редактирование, быстрое редактирование, корзина) и не удалять сообщение в настраиваемом типе сообщений wp_logout_url не пересылает правильную ссылку Запросить сообщения из определенной категории и выбранного тега Должен ли я remove_filter заменять фильтр? Добавить атрибут «alt» в GD Star Rating <img> Теги Эквивалент плагина обмена WordPress? Последние сообщения и последние сообщения отображаются по-разному

Как передать аргумент своему пользовательскому ходоку?

Я создал пользовательский ходок, и он работает по желанию, когда я жестко кодирую свою переменную.

Я хочу, чтобы иметь возможность позвонить моему ходоку и передать ему переменную, которая используется в ходунки.

Например:

'walker' => new Plus_walker($refine => 'review'), 

Ходок, который я настраивал для вывода http: // URL / review , чтобы найти сообщения в категории обзора для этого пункта меню. Но я хочу иметь возможность использовать тот же ходок для «превью», «интервью» и т. Д. До сих пор мои попытки ввода переменных только что сломали все: «Ошибка синтаксиса: синтаксическая ошибка, неожиданный T_DOUBLE_ARROW».

Я знаю, что могу просто переписать код и сделать несколько разных ходунков (Review_walker, Preview_walker и т. Д.), Но это просто кажется неправильным (и я считаю, что это может быть важной вещью, чтобы знать …)

Мой код ходока здесь:

 class plus_walker extends Walker_Nav_Menu { var $refine; function __construct($refine) { $this->refine = $refine; } function start_el(&$output, $item, $depth, $args) { global $wp_query; $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; $class_names = $value = ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ); $class_names = ' class="'. esc_attr( $class_names ) . '"'; $output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $class_names .'>'; $attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : ''; $attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : ''; $attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : ''; $attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) . '' : ''; //This is where I want the argument to live. $modded_url = substr($attributes,0,-1) . '+' . $refine . '"'; $item_output = $args->before; $item_output .= '<a'. $modded_url .'>'; $item_output .= $args->link_before .$prepend.apply_filters( 'the_title', $item->title, $item->ID ).$append; $item_output .= $description.$args->link_after; $item_output .= '</a>'; $item_output .= $args->after; $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ); } } 

И php-вызов в моих шаблонах:

 <?php wp_nav_menu( array( 'menu' => 'Handheld', 'container' => 'div', 'container_class' => 'col_1', //'container_id' => , 'menu_class' => 'menu', // 'menu_id' => , 'echo' => true, 'fallback_cb' => 'wp_page_menu', 'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>', 'depth' => 0, 'walker' => new Plus_walker(array($refine => 'review')), ) ); ?> 

Я пробовал кучу разных конфигураций: «уточнить» => «обзор, с массивом и без него, но до сих пор нет радости, просто ошибки (неожиданно« => »в основном).

Solutions Collecting From Web of "Как передать аргумент своему пользовательскому ходоку?"

Родные ходоки запускаются с помощью метода walk() и не настроены на получение данных о создании. Вы можете определить настраиваемый метод свойств и конструктора для этой цели:

 class plus_walker extends Walker_Nav_Menu { var $refine; function __construct($refine) { $this->refine = $refine; } } //stuff 'walker' => new plus_walker('review'); 

После этого вы можете получить доступ к своим пользовательским данным в виде $this->refine методы walker.

Другим способом является добавление настраиваемого аргумента в wp_nav_menu() . Это удобно, если вам нужно передать значение вне класса ходока в целом:

 wp_nav_menu( array( 'theme_location' => 'secondary', 'depth' => 1, 'walker' => new Custom_Walker(), 'walker_arg' => 'Custom argument value here' ) ); 

Из класса walker вы можете получить доступ к этому настраиваемому аргументу изнутри функции start_el() внутри класса walker ( Walker_Nav_Menu::start_el() ) следующим образом:

 $custom_arg = esc_attr( $args->walker_arg ); 

Надеюсь, это поможет, это помогает с несколькими неясными сценариями, с которыми я столкнулся, что рекомендация Rarst выше может плохо справляться.

Вы можете просто получить собственный аргумент со слегка измененной start_el() .

Прежде всего, вызовите элемент wp_nav_menu (или любой другой ходок, использующий функцию) с аргументами, указанными в ответе Кевина Лири.

В функции start_el в вашем пользовательском start_el вы можете получить доступ к своим данным просто через $args['walker_arg'] ; обратите внимание, что walker_arg может быть изменен в соответствии с вашими потребностями.

Кроме того, с этим и частично с решением Кевина Лири вы можете передать более одного пользовательского аргумента для ходока!