2010-08-24 104 views
7

是否可以在子菜单(在Wordpress中)的菜单中添加某种类,如“箭头”或跨度? 似乎你可以做到这一点是使用JavaScript,但我想知道是否有PHP解决方案...PHP/Wordpress - 向父菜单添加箭头

在WP 3.0中,我看到活动菜单上有他们的“父”或“祖先”类,但这只适用于活动菜单,我也需要它用于非活动菜单

+0

你在3.0中使用菜单生成器吗?或者您是否使用网页或类别进行导航?请详细说明您如何获取菜单并说明您的工作代码,以便我们能够更好地为您提供帮助。 – kevtrout 2010-08-24 18:24:19

+0

我使用内置的自定义菜单 – Alex 2010-08-24 18:40:31

回答

12

这个功能真的应该在WordPress核心!
无论如何,我看了一下你在另一个答案的评论中发送的菜单模板源,并且发现了一个(非常冒险的)方法来添加带有子项的菜单项的类。它基本上将默认walker的子类扩展为默认行为。这可能是最好的,如果你把它放在你的主题functions.php。下面的代码:

<?php 
class Arrow_Walker_Nav_Menu extends Walker_Nav_Menu { 
    function display_element($element, &$children_elements, $max_depth, $depth=0, $args, &$output) { 
     $id_field = $this->db_fields['id']; 
     if (!empty($children_elements[$element->$id_field])) { 
      $element->classes[] = 'arrow'; //enter any classname you like here! 
     } 
     Walker_Nav_Menu::display_element($element, $children_elements, $max_depth, $depth, $args, $output); 
    } 
} 
?> 

调用它,你需要当你调用在你的主题wp_nav_menu()添加walker说法,就像这样:

<?php 
wp_nav_menu(array('walker' => new Arrow_Walker_Nav_Menu, [other arguments...])) 
?> 

希望对你有用!我只是表面上测试过,但它似乎工作。让我知道是否有任何边缘情况下添加类失败。

+0

圣洁的废话它的作品!谢谢:D – Alex 2010-08-29 13:55:49

+0

存在ony失败的情况:当在参数(fallback_cb)中指定回调函数时,即。当您没有创建自定义菜单时,wp_nav_menu将从wp_page_menu()函数中检索菜单项,该函数使用不同的Walker我认为 – Alex 2010-08-29 14:26:08

+0

是的 - wp_page_menu使用的walker不允许非常容易地添加类。我会看看,看看我能否在未来几天内想到一个解决方法,如果我发现任何问题,我会编辑我的答案。 – 2010-09-05 10:27:13

3

我不知道任何原生的WordPress支持,但您可以轻松地使用一些jQuery来做到这一点。

<script type="text/javascript"> 
$("#menu-id ul li:has(ul)").addClass("parent"); 
</script> 
+0

谢谢,我知道这一点。我想知道是否有办法用PHP来做到这一点。 js方法的问题在于,如果菜单项的宽度可变,则在页面加载过程中会出现小的“闪烁” – Alex 2010-08-28 13:26:02

+0

因此,您需要一种方法来修改WP在生成HTML时生成的HTML , 然后?有没有内置的支持,或者你可以自定义模板? – Rup 2010-08-28 13:31:05

+0

以及你可以得到整个菜单输出(一个字符串)并修改它之前它得到回应,但我不知道我可以改变那里... 菜单模板在这里:http://core.trac .wordpress.org/browser/trunk/wp-includes/nav-menu-template.php – Alex 2010-08-28 13:39:22

0

简单而不起眼的方式来添加类的父主菜单是否有子菜单

而且风格

<style type="text/css"> 
     .main-navigation .parent > a, .main-navigation .parent > a:hover { 
      background-image: url("images/arrow.png"); 
      background-position: right center; 
      background-repeat: no-repeat; 
    } 

    </style> 
3

如果你和我一样,想添加在您的父菜单项中添加一个HTML箭头,在Donald Harvey的客户助理类中添加一条像这样的线:

$element->title .= '<span class="caret down-caret">&#x25BC;</span>'; 

你也可以直接将HTML添加到WP管理>菜单页面中的菜单标签,但这不是一个好办法。

我在博客一点关于这个在这里http://cameronnokes.com/blog/adding-an-icon-to

0

我不知道是什么问题,但我们可以在菜单中通过css这样添加箭头:

.menu li > a:after { 
    color: #fff; 
    content: ' ▾'; 
} 

.menu li > a:only-child:after { 
    content: ''; 
} 
1

只需粘贴这对你的CSS代码,它会按预期工作。

.nav-menu li > a:after { 
    color: #888; 
    content: ' ▾'; 
} 

.nav-menu li > a:hover:after { 
    color: #444; 
    content: ' ▾'; 
} 

.nav-menu li > a:only-child:after { 
    content: ''; 
} 

Ps。不要忘记设置页面UTF-8