我有以下代码块,可让所有空类别或子类别的存档页面从导航栏中隐藏起来,但它有两个明显的问题,需要我帮忙解决。
我当前使用的代码如下:
/* HIDE EMPTY CATEGORIES AND SUBCATEGORIES FROM NAVBAR - TO CORRECTLY EDIT THE MENU AT THE BACK-END, MAKE SURE YOU REMOVE THIS CODE */
function hide_empty_navbar_items ( $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;
}
add_filter( 'wp_get_nav_menu_items', 'hide_empty_navbar_items', 10, 3 );
答案 0 :(得分:1)
我设法找到了以下代码,该代码使您可以隐藏网站前端导航栏中的空类别和子类别级别,同时还允许以管理员身份登录的任何人仍可以在界面上看到完整的菜单结构后端。
此代码从本质上解决了最初问题中剩下的代码问题,并提供了更为实用的解决方案。
view
答案 1 :(得分:0)
我做了这个,也是为了照顾物品库存。如果类别仅包含缺货商品,则不会显示菜单:
/**
Hide empty categories from menu
**/
if(!is_admin()) {
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 ) ) {
$object = get_term($item->object_id, $item->object);
$args = array(
'posts_per_page' => -1,
'product_cat' => $object->slug,
'post_type' => 'product',
'orderby' => 'title',
'meta_query' => array(
array(
'key' => '_stock_status',
'value' => 'instock'
)
)
);
$the_query = new WP_Query( $args );
if($the_query->post_count <= 0){
unset( $items[$key] );
}
}
}
return $items;
}