我正在寻找一种方法来隐藏wordpress中自定义菜单中的空类别?
我已经构建了一个庞大的层次结构,现在我将逐个填写这些类别。但是直到我在其中添加帖子,我想将其隐藏在菜单中。
似乎我需要hide_empty=1
之类的类似于" wp_list_categories"但现在为" wp_nav_menu"。
答案 0 :(得分:1)
将以下代码添加到子主题的functions.php文件中:
/*
* Hide empty categories from nav menus
*/
add_filter( 'wp_get_nav_menu_items', 'gowp_nav_remove_empty_terms', 10, 3 );
function gowp_nav_remove_empty_terms ( $items, $menu, $args ) {
global $wpdb;
$empty = $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, $empty ) ) ) {
unset( $items[$key] );
}
}
return $items;
}
答案 1 :(得分:0)
我们无法比较" wp_list_categories"与" wp_nav_menu"。我们没有" wp_nav_menu"的hide_empty选项。只有解决方案是我们必须编写自己的菜单,否则我们必须使用#34; wp_nav_menu"。
的钩子。答案 2 :(得分:0)
接受的答案是有效的,但它破坏了我的菜单结构,这意味着 ul > li > ul.sub-menu > li > 等等。我没有取消设置项目,而是在 item->classes 数组中添加了一个新类以将其隐藏在 css 中。
if (!is_admin()) add_filter('wp_get_nav_menu_items', 'wp_nav_remove_empty_terms', 10, 3);
function wp_nav_remove_empty_terms ($items, $menu, $args) {
global $wpdb;
$empty = $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, $empty))) {
//unset( $items[$key] );
$item->classes[] = 'hide';
}
}
return $items;
}