2013-03-05 5 views
0

Я использую раскрывающееся меню в моей теме WP с использованием ящиков выбора. С помощью некоторого jQuery страница изменяется при выборе новой опции выбора. Однако, когда новая страница отображается, опция по умолчанию в меню выбора остается «Стартовая страница» (первая).Измените выбранный вариант выпадающего меню в зависимости от страницы (меню)

Что я могу сделать, чтобы сделать одно изменение текущей страницы?

header.php:

<div id="navigation" role="navigation"> 

    wp_nav_menu(array(
     'container' => false, 
     'menu_id' => 'nav', 
     'theme_location' => 'primary', // your theme location here 
     'walker'   => new Walker_Nav_Menu_Dropdown(), 
     'items_wrap'  => '<select>%3$s</select>', 
     'fallback_cb' => 'bp_dtheme_main_nav' 
    )); 


    class Walker_Nav_Menu_Dropdown extends Walker_Nav_Menu{ 
     function start_lvl(&$output, $depth){ 
      $indent = str_repeat("\t", $depth); 
      } 

     function end_lvl(&$output, $depth){ 
      $indent = str_repeat("\t", $depth); 
     } 

     function start_el(&$output, $item, $depth, $args){ 
      $item->title = str_repeat("&nbsp;- ", $depth).$item->title; 

      parent::start_el($output, $item, $depth, $args); 

      $href =! empty($item->url) ? ' value="' . esc_attr($item->url) .'"' : '#'; 

      $output = str_replace('<li', '<option '.$href, $output); 
     } 

     function end_el(&$output, $item, $depth){ 
      $output .= "</option>\n"; // replace closing </li> with the option tag 
     } 
    } ?> 

</div> 

JQuery:

$("#navigation select").on('change', function() { 
    window.location = jq(this).find("option:selected").val(); 
}); 

ответ

2

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

$("#navigation option").each(function() { 
    if ($(this).val() === window.location.toString()) { 
     $(this).prop('selected', true); 
    } 
}); 
+0

Спасибо! Он работает, если я изменяю === до ==. Очевидно, что значение и URL немного отличаются в некотором роде (даже если они выглядят точно так же, когда console.logging их) – holyredbeard

+1

@holyredbeard Да, извините, 'window.location' является объектом. Вместо использования '$ (this) .val() == window.location' и принудительного типа, используйте' $ (this) .val() === window.location.toString() '. Я отредактирую свой ответ, чтобы отразить это. –

Смежные вопросы