我需要更改为特定类别“配方”或“产品评论”查询的帖子数量。下面的代码对此非常有用,我在函数中有它。php:
function change_number_of_posts($query) {
if ($query->is_category && ( $query->is_category(\'recipes\') || $query->is_category(\'product-reviews\') ) )
$query->query_vars[\'posts_per_page\'] = -1; // Show all posts
return $query; // Return our modified query variables
}
add_filter(\'pre_get_posts\', \'change_number_of_posts\'); // Hook our custom function onto the request filter
问题是“产品评论”类别是父类别,因此当查询其子类别之一时,上述代码不起作用。
我可以使用\'cat_is_ancestor_of()\'
我的循环中的函数可以对这些子类别执行我需要的操作,但我无法让它在函数中工作。php,我认为不能从那里调用它。
我基本上想说“如果类别是‘配方’或‘产品评论’或‘产品评论’的子类别……”从我的功能。php文件。
我知道我可以硬编码所有子类别,但我不想每次添加产品评论子类别时都必须编辑php。
我花了几个小时试图找到解决方案,非常感谢您的帮助!!
最合适的回答,由SO网友:Stephen Harris 整理而成
功能cat_is_ancestor_of
接受两个参数(两个类别ID)。要检查ID 61的类别是否是54类别的祖先,请执行以下操作:
cat_is_ancestor_of(54,61);
我不确定是否有更好的方法,但您可以使用
get_queried_object()
然后检查这是否是具有某个ID的类别的祖先(本例中为6):。
function change_number_of_posts($query) {
if ($query->is_category){
$cat = get_queried_object();
$cat_id = (int) $cat->term_id;
if( $query->is_category(\'recipes\') || $query->is_category(\'product-reviews\')){
$query->query_vars[\'posts_per_page\'] = -1;
}elseif(cat_is_ancestor_of(6,$cat_id)){
$query->query_vars[\'posts_per_page\'] = -1;
}
}
return $query;
}
add_filter(\'pre_get_posts\', \'change_number_of_posts\');
未经测试。
(我遗漏了任何错误检查(例如,如果类别不存在的话)。