猿问

如何隐藏字压空子分类?

我正在使用此代码来隐藏空类别,并且它有效。


add_filter( 'wp_get_nav_menu_items', 'nav_remove_empty_category_menu_item', 10, 3 );

function nav_remove_empty_category_menu_item ( $items, $menu, $args ) {

    global $wpdb;

    $nopost = $wpdb->get_col( "SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE count = 0" );

    foreach ( $items as $key => $item ) {

        if ( ( 'taxonomy' == $item->type ) && ( in_array( $item->object_id, $nopost ) ) ) {

            unset( $items[$key] );

        }

    }

    return $items;

}

但我希望它仅适用于子类别...而不是父类别。所以现在它隐藏了一些父类别,我不想要这样。我只想隐藏空的子类别。


我该怎么做?


阿波罗的战车
浏览 53回答 1
1回答

慕虎7371278

您根本不需要递归函数。该表具有另一个名为 的列,如果它是顶级项,则该列设置为,如果它是任何级别的子项,则该列将成为父项的 ID。只需添加term_taxonomyparent0AND parent != 0到您的查询,这应该照顾它。(也就是说,我觉得拉动术语并循环浏览项目以进行比赛有点过分,但是如果不了解更多,就很难推荐更好的解决方案,而且这不是一个糟糕的方法 - 那些“杀死苍蝇的锤子”之一。它可能(相当)有点迂腐,但我也更喜欢在帮助器函数之外编写SQL语句,以便更容易一目了然地看到需要运行的内容::p repare,并且更容易处理更长的查询add_filter( 'wp_get_nav_menu_items', 'nav_remove_empty_category_menu_item', 10, 3 );function nav_remove_empty_category_menu_item( $items, $menu, $args ){    global $wpdb;    $sql = "        SELECT term_taxonomy_id        FROM   $wpdb->term_taxonomy        WHERE  count = 0        AND    parent != 0    ";    $no_posts = $wpdb->get_col( $sql );    foreach( $items as $key => $item ){        if( 'taxonomy' == $item->type && in_array($item->object_id, $no_posts) ){            unset( $items[$key] );        }    }    return $items;}
随时随地看视频慕课网APP
我要回答