如何检查是否正在查询下级类别

时间:2012-03-18 作者:Angie

我需要更改为特定类别“配方”或“产品评论”查询的帖子数量。下面的代码对此非常有用,我在函数中有它。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。

我花了几个小时试图找到解决方案,非常感谢您的帮助!!

1 个回复
最合适的回答,由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\'); 
未经测试。

(我遗漏了任何错误检查(例如,如果类别不存在的话)。

结束