Можно ли передать виджет навигации в Wordpress (боковой панели) новых $ args? - PullRequest
0 голосов
/ 16 февраля 2019

Я потратил некоторое время на поиск, но я не нашел ничего конкретного в отношении передачи нового $args в виджет навигации.Я наткнулся на этот пост .Тем не менее, я думаю, что ответ немного излишним для того, чего я пытаюсь достичь.

Подводя итог ссылочной публикации, она в основном показывает, как вы можете достичь того, что мне нужно, но толькоесли создается совершенно новый виджет.


В частности, я хочу объединить или перезаписать следующее $args исключительно для виджета меню, размещенного на боковой панели Wordpress;

wp_nav_menu( array $args = array(
   'menu'              => "header-quicklinks",
   'menu_id'           => "quicklinks",
   'theme_location'    => "sidebar-header"
) );

Если возможно, я бы хотел передать идентификатор виджета, в моем случае nav_menu-6;к функции и $args применяется только к этому меню специально, таким образом я могу подправить код для выбора других меню, если у меня есть требование.

В настоящее время возиться со следующим;

function widget_nav_args($args){
  $menu = $args['menu'];
  if($menu->term_id === "menu-quick-links") { // < Error: non-object.
     return array_merge( $args, array(
            'menu_class' => 'TESTING', // for testing.
            // More settings here ... 
     ) );
  }
  return $args;
}
add_filter('widget_nav_menu_args', 'widget_nav_args');

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы почти у цели.Фильтр widget_nav_menu_args принимает больше параметров, чем просто $args для навигации.Вы хотите посмотреть на аргументы виджета, который является третьим параметром.Это выглядело бы примерно так:

function widget_nav_args( $nav_menu_args, $nav_menu, $args, $instance){ // <- notice extra params..

    if( $args['id'] === 'sidebarheader' ) { // < This is where we check if it's the right widget
      return array_merge( $nav_menu_args, array(
          'menu_class' => 'TESTING', // for testing.
          // More settings here ... 
     ) );
  }

  return $nav_menu_args;
}

add_filter('widget_nav_menu_args', 'widget_nav_args', 10, 4);

Обратите внимание, я должен был явно указать, сколько аргументов передать в мою функцию фильтра.Обязательно прочитайте документацию в WP Codex здесь .

Надеюсь, это поможет!

0 голосов
/ 26 февраля 2019
add_filter('widget_nav_menu_args', 'my_wp_nav_menu_args');

function my_wp_nav_menu_args($args) {

    if (is_page(2) //Only target page 2 
            && $args['theme_location'] === 'primary') { // Check and only target the primary menu
        $args['menu'] = 'Menu for Profile';
    }
    return $args;
}

примеры аргументов приведены ниже.

$arguments = array(
    'menu' => '',
    'container' => 'div',
    'container_class' => '',
    'container_id' => '',
    'menu_class' => 'menu',
    'menu_id' => '',
    'echo' => true,
    'fallback_cb' => 'wp_page_menu',
    'before' => '',
    'after' => '',
    'link_before' => '',
    'link_after' => '',
    'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>',
    'item_spacing' => 'preserve',
    'depth' => 0,
    'walker' => '',
    'theme_location' => ''
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...