2

有没有办法可以使用条件检查页面是否是特定类别的子类别?

即:在我的“category.php”上,我目前有:

 <?php } else if (is_category( 'blog' )) { ?>

这是为了根据用户所在的类别页面呈现不同的视图。

有可能做类似的事情吗?

 <?php } else if (is_sub_category_of( 'blog' )) { ?>
4

3 回答 3

3

虽然很老,但我已经创建了完美的解决方案。

将此添加到您的functions.php文件中:

/** check if the current category is a child of a given category **/
function current_cat_is_sub_of($parent = ''){
    global $wp_query;
    $cat = $wp_query->get_queried_object();

    if ( ! isset( $wp_query ) ) {
        _doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
        return false;
    }
    elseif( $cat->parent!=0 && $cat->parent == $parent ){
        return true;
    }
    else{
        return false;
    }
}

然后你可以通过各种方式使用它。例如更改给定类别下所有子类别页面中帖子的显示顺序:

/** order posts under category 123 from new to old **/
function order_digital_posts($query){
    if (current_cat_is_sub_of('THE PARENT CATEGORY ID') && $query->is_main_query()) {
        $query->set( 'order', 'ASC' );
    }
}
add_action('pre_get_posts', 'order_digital_posts');

享受!伊塔马尔

于 2017-10-18T18:19:48.267 回答
1

老问题,但我昨晚偶然发现了这个问题,我不得不为自己找到答案。

这是在我的category.php页面上:

$category = get_the_category();

if(isset($category[1]) && $category[1]->slug === 'catagory-you-want') {

    // Do stuff if it's a child of "Category You Want"
    // You can use $category[1]->cat_ID to check which category instead

}

当前子类别$category位于位置0

如果“您想要的类别”有一个父类别而您不知道,这将更加困难。

于 2014-02-20T12:45:20.213 回答
0

您可以查看您当前的类别父 ID 是否与“博客”类别 ID 匹配。如果是这样,您当前的类别是“博客”的子类别。

$current_cat = get_query_var("category");
$cat = get_term_by('slug',$current_cat,"category");
$blog = get_term_by('slug',"blog","category");


if($cat->parent == $blog->ID){ /*your code */ }

此代码将执行您描述的功能。

于 2012-11-07T13:51:28.470 回答