2012-11-15 126 views
1

我發現實例添加類頂級項目,所以我們可以顯示與子項的菜單項箭頭,但似乎可怕,以應付已建成在WordPress類中,不能顯示當前和CSS懸停的箭頭,它只會毀掉所有狀態。wp_nav_menu添加<span></span>標籤內<a></a>標籤是父母

目前的導航菜單是這樣<li><a>Text</a></li>

有什麼方法來添加父<a></a>標籤,而不是內<span class="arrow"></span>

添加 - > 「<span class="arrow"></span>」 - >內<a/></a>標籤

因此 - ><li><a>Text<span class="arrow"></span></li></a>那就是父母。

當前代碼添加<span></span>標籤<a></a>標籤

class My_Walker_Nav_Menu extends Walker_Nav_Menu { 
    function start_lvl(&$output, $depth, $args) { 
     $indent = str_repeat("\t", $depth); 
     if('primary' == $args->theme_location && $depth ==0){ 
      $output .='<span class="arrow"></span>'; 
     } 
     $output .= "\n$indent<ul class=\"sub-menu\">\n"; 
    } 
} 
+0

你想考慮jQuery? – loQ

回答

1

要覆蓋不正確的方法之外。您需要改爲start_el。下面是它的代碼:

class add_span_walker extends Walker_Nav_Menu { 
    function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) { 
     global $wp_query; 
     $indent = ($depth) ? str_repeat("\t", $depth) : ''; 

     $class_names = ''; 

     $classes = empty($item->classes) ? array() : (array) $item->classes; 
     $classes[] = 'menu-item-' . $item->ID; 

     $class_names = join(' ', apply_filters('nav_menu_css_class', array_filter($classes), $item, $args)); 
     $class_names = $class_names ? ' class="' . esc_attr($class_names) . '"' : ''; 

     $id = apply_filters('nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args); 
     $id = $id ? ' id="' . esc_attr($id) . '"' : ''; 

     $output .= $indent . '<li' . $id . $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  ) .'"' : ''; 

     $item_output = $args->before; 
     $item_output .= '<a'. $attributes .'>'; 
     $item_output .= $args->link_before . apply_filters('the_title', $item->title, $item->ID) . $args->link_after; 

     if ('primary' == $args->theme_location) { 
      $submenus = 0 == $depth || 1 == $depth ? get_posts(array('post_type' => 'nav_menu_item', 'numberposts' => 1, 'meta_query' => array(array('key' => '_menu_item_menu_item_parent', 'value' => $item->ID, 'fields' => 'ids')))) : false; 
      $item_output .= ! empty($submenus) ? (0 == $depth ? '<span class="arrow"></span>' : '<span class="sub-arrow"></span>') : ''; 
     } 
     $item_output .= '</a>'; 
     $item_output .= $args->after; 

     $output .= apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args); 
    } 
} 

該代碼會<span class="sub-arrow"></span>從選擇的情況下,該primary主題的地理位置表明這個菜單項有子項的菜單添加到頂層菜單項。

+0

嘿感謝nikola,我完全需要它像是有父母然後$ item_output以下,可以做請嗎? :) –

+0

對不起,我無法真正理解你的意思:)我認爲你最初只想在'a'標籤內添加''。你可以試着解釋一下(用一個例子最好)你想要什麼:) –

+0

如果有父母或者如果有子菜單,那麼它輸出下面的代碼,我會添加什麼,你有什麼建議? –