我正在扩展Walker_Nav_Menu:如何获取当前项的子元素的数量?

时间:2011-11-23 作者:0al0

我正在尝试扩展Walker\\u Nav\\u菜单Walker,以对WP输出菜单的方式进行一些更改。我必须重写的方法是start\\u el,因此我创建了Walker并复制了基本方法:

<?php
class myCustom_Walker_Nav_Menu extends Walker_Nav_Menu {
    function start_el(&$output, $item, $depth, $args) {
        global $wp_query;
        $indent = ( $depth ) ? str_repeat( "\\t", $depth ) : \'\';

        $class_names = $value = \'\';

        $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="\' . esc_attr( $class_names ) . \'"\';

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

        $output .= $indent . \'<li\' . $id . $value . $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;
        $item_output .= \'</a>\';
        $item_output .= $args->after;

        $output .= apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );
    }
}  
?>
我的问题是,我似乎无法获得当前项目的孩子($项目)。谁能帮帮我吗?

2 个回复
最合适的回答,由SO网友:0al0 整理而成

在一个非常类似的问题中找到了解决方案。公认的解决方案对我来说非常有效,尽管它涉及到修复wordpress bug。。。

Add 'has_children' class to parent li when modifying Walker_Nav_Menu

SO网友:AlxVallejo

计数(get\\u children($item));

这有帮助吗?

结束