如何从WP_Term数组移除Uncategorized分类?array_search失效排查
问题排查:无法用
array_search移除WP_Term数组中的「Uncategorized」分类 嘿,我一眼就看出问题所在啦!你用array_search('uncategorized', $categories)找不到目标项的原因很简单——你的$categories数组里装的不是字符串,而是WP_Term对象,array_search默认会直接对比数组元素和你传入的字符串,自然匹配不上~
接下来给你几种可行的解决方案,按需选择:
方案1:用array_filter直接过滤数组(最简洁)
这种方法直接通过回调函数筛选掉slug为uncategorized的分类项,代码干净利落:
<?php if ( get_post_type( get_the_ID() ) == 'work' ) { $categories = get_categories( array() ); // 过滤掉slug为uncategorized的分类 $categories = array_filter($categories, function($term) { return $term->slug !== 'uncategorized'; }); // 遍历输出剩余分类名称 foreach ( $categories as $category ) { printf( $category->name ); } } ?>
方案2:循环数组找到对应键后unset(直观可控)
如果你需要更明确地定位到目标项再移除,或者要保留原数组键名,这种方法更直观:
<?php if ( get_post_type( get_the_ID() ) == 'work' ) { $categories = get_categories( array() ); // 循环遍历数组,找到slug为uncategorized的项 foreach($categories as $key => $term) { if($term->slug === 'uncategorized') { unset($categories[$key]); break; // 找到目标后立即退出循环,提升效率 } } // 遍历输出剩余分类名称 foreach ( $categories as $category ) { printf( $category->name ); } } ?>
方案3:调用get_categories时直接排除(最高效)
其实根本不需要先获取所有分类再过滤,get_categories支持直接通过参数排除指定分类,这样能减少不必要的数据查询:
<?php if ( get_post_type( get_the_ID() ) == 'work' ) { // 获取分类时直接排除Uncategorized(根据你的数组,它的term_id是1) $categories = get_categories( array( 'exclude' => '1', // 如果不确定ID,也可以通过slug动态获取ID: // 'exclude' => get_term_by('slug', 'uncategorized', 'category')->term_id, ) ); // 遍历输出分类名称 foreach ( $categories as $category ) { printf( $category->name ); } } ?>
小提醒:
- 注意核对分类的
slug或term_id是否正确,避免大小写或拼写错误 - 方案3是最优解,因为它从源头就排除了不需要的分类,减少了内存占用和循环操作
内容的提问来源于stack exchange,提问作者A3O
相关产品推荐
相关产品推荐

