如果类别-主导航子菜单项中没有任何内容,则隐藏类别链接

时间:2014-12-15 作者:Dewayne Phillips

在我的主导航菜单中,我有属于子菜单项的类别链接:

示例:

主导航:列表

子菜单类别项目:划船、露营、钓鱼

因此,如果划船运动中没有列表,那么基本上就没有类别链接

就目前而言,如果用户单击子菜单类别项,但其中没有列表,则会给他们带来遗憾的“未找到任何内容”。这让人困惑

相反,我正在尝试创建一个简单的插件,如果子菜单类别导航链接中有列表,它将只显示这些链接。如果其中没有列表,则不会显示子菜单导航类别链接。看起来很简单,我试着在网上和Wordpress上查找,但似乎什么都找不到。我不是一个程序员,我相信你已经明白了,但我相信我可以通过一点帮助来实现这一点。谢谢

1 个回复
SO网友:propz

你应该用定制的导航助行器试试。下面是它应该如何工作的代码示例

我检查菜单项是否为类别链接。如果是,则有另一个检查->类别计数
如果类别没有任何帖子,链接将不会传递到html输出。

class Menu_Category_Count extends Walker_Nav_Menu {

    var $number = 1;

    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
        $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_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 . $value . $class_names .\'>\';

        $atts = array();
        $atts[\'title\']  = ! empty( $item->attr_title ) ? $item->attr_title : \'\';
        $atts[\'target\'] = ! empty( $item->target )     ? $item->target     : \'\';
        $atts[\'rel\']    = ! empty( $item->xfn )        ? $item->xfn        : \'\';
        $atts[\'href\']   = ! empty( $item->url )        ? $item->url        : \'\';

        $atts = apply_filters( \'nav_menu_link_attributes\', $atts, $item, $args );

        $attributes = \'\';
        foreach ( $atts as $attr => $value ) {
            if ( ! empty( $value ) ) {
                $value = ( \'href\' === $attr ) ? esc_url( $value ) : esc_attr( $value );
                $attributes .= \' \' . $attr . \'="\' . $value . \'"\';
            }
        }

        // Get Category + Category Count
        $have_posts = true;
        if ($item->object == "category") {
            $category = get_category($item->object_id);
            // Does the category have any posts?
            if ($category->category_count == 0) $have_posts = false;
        }

        if ($have_posts) {
            $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 );
    }
}
如果您从未接触过定制导航助行器,请查看this tutorial at tutsplus.

结束

相关推荐

List all blog categories

我已经创建了一个博客插件。我的博客中有博客类别。我想获得所有博客类别的列表,并将其列在我的www.domain中。com/blogs/page。我的博客类别名称为“blogcategory”。我不知道如何在list-category 作用我是wordpress开发的nooby。