我正在构建一个插件,根据用户浏览的类别显示消息。为此,我想获取所有类别,我通过运行以下命令获取所有类别:
$all_categories = get_categories(array(\'hide_empty\' => false ));
$all_category_ids = array();
foreach($all_categories as $category)
{
array_push($all_category_ids, $category->term_id);
}
然后,我将使用以下方法获取要隐藏的子类别:
$exclude_categories = get_categories(array( \'child_of\' => 55, \'hide_empty\' => false ));
$exclude_category_ids = array();
foreach($exclude_categories as $ex_cat)
{
array_push($exclude_category_ids, $ex_cat->term_id);
}
然后我通过以下方式获得差异:
$to_show = array_diff($all_category_ids,$exclude_category_ids)
这完成了任务,但查询监视器插件显示通过运行
get_categories()
两次
有没有更好的方法?
最合适的回答,由SO网友:TheDeadMedic 整理而成
自从你第一次get_categories
调用会将所有术语加载到内存中,您只需在它们上循环,检查它们是否有ID为的祖先55
, WordPress再也不会访问数据库了:
$terms = get_terms([
\'taxonomy\' => \'category\',
\'hide_empty\' => false,
]);
foreach ( $terms as $k => $term ) {
if ( in_array( 55, get_ancestors( $term->term_id, \'category\', \'taxonomy\' ) ) )
unset( $terms[ $k ] );
}