2012-11-15 93 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

如果有父母或者如果有子菜单,那么它输出下面的代码,我会添加什么,你有什么建议? –