get_query_var('cat')也会获取子类别帖子吗?

时间:2016-02-09 06:20:26

标签: php wordpress

在category.php中我使用自定义查询来获取帖子:

                <?php

                    $cat_id = get_query_var('cat'); 
                    $args = array(
                        'posts_per_page' => 2,
                        'orderby' => 'date',
                        'cat' => $cat_id
                    );

                    query_posts($args);
                    // the Loop
                    get_template_part('aa_HomeLoopMain');

                ?>

我正在使用get_query_var('cat')来获取当前类别的类别帖子,我认为这只会给类别ID的类别帖子$cat_id但不是子类别帖子

1 个答案:

答案 0 :(得分:2)

你做错了。永远不要使用query_posts,它会破坏主查询对象,重新运行查询,并且速度慢,这些都会对性能和SEO以及依赖于主查询的其他函数产生负面影响。另外,如果这是您的主要查询,则根本不应该使用自定义查询,您应该在执行前使用pre_get_posts来更改主查询。

get_query_var( cat )仅返回查询的类别,而不是其子级。

您应该删除query_posts部分并将以下内容添加到functions.php

add_action( 'pre_get_posts', function ( $q )
{
    if (    !is_admin()
         && $q->is_main_query()
         && $q->is_category()
    ) {
        $q->set( 'posts_per_page', 6 );
    }
});

修改

你应该总共查询6个帖子,我已经更新了我的帖子。您可以使用循环尝试以下内容

if ( have_posts() ) {
    while( have_posts() ) {
        the_post();

        if ( 1 <= $wp_query->current_post ) {
            // Add your markup for column one, this will display 2 posts
        } else {
            // Add your markup for column two, this will display 4 posts
        }
    }
}

编辑2

出于某种原因,我无法发布我的手机评论,但我认为您错误地使用了该代码。我已更新我的代码以显示循环。它确实有效。如果没有,则其他内容会破坏您的网页,例如query_posts