带有行的分页查询返回始终发布即使空

时间:2017-09-02 13:58:56

标签: wordpress

我正在使用每3个帖子包含行的自定义查询。在分页类别中,即使类别为空,它也总是返回12个帖子。我有什么问题吗?

    <?php 
        $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
    $args = array(
    'posts_per_page' => 12,
    'paged'          => $paged
    );

$the_query = new WP_Query($args);
if ($the_query->have_posts()) :
    $counter = 0;
    while ($the_query->have_posts()) : $the_query->the_post();
        if ($counter % 3 == 0) :
            echo $counter > 0 ? "<div class='clear'></div></div>" : ""; // close div if it's not the first
            echo "<div class='row'>";
        endif;
        ?>
        <?php get_template_part( 'templates/3columnpost', get_post_format() ); ?>
        <?php
        $counter++;

    endwhile;
         endif;
wp_reset_postdata();
?>

1 个答案:

答案 0 :(得分:1)

您正在通过调用WP_Query来重置Wordpress循环,因此它会收到所有帖子。

有多种方法可以设置每页的帖子数量。我建议你尽可能做#1,但如果没有,那么2是下一个最好的选择。

<强> 1。在Wordpress Admin中设置每页的帖子

默认的Wordpress循环显示Admin Settings - >中设置的帖子数量。在&#34; 博客页面最多显示&#34;下的Reading页面。您可以将其更改为12。

如果您使用此功能,您还需要更改代码以完全删除WP_Query并使用默认循环,以便再次显示类别帖子,例如

// Check if there are any posts to display
if ( have_posts() ) : 
    // do whatever you need to do before you start displaying the posts       
    // The Loop:
    while ( have_posts() ) : the_post(); 

        // display the post here

    endwhile;      
endif;

请注意,这会更改所有帖子类型的帖子数量

<强> 2。更改functions.php中每页的帖子数量

如果您只想更改特定帖子类型的每页帖子数,可以在functions.php中进行,例如

function set_custom_posts_per_page( $query ) {
    if ( is_admin() || ! $query->is_main_query() )
        return;

    if ( is_post_type_archive( 'movie' ) ) {
        // Display 12 posts for a custom post type called 'movie'
        $query->set( 'posts_per_page', 12 );
        return;
    }
}
add_action( 'pre_get_posts', 'set_custom_posts_per_page', 1 );

参考Wordpress Codex pre_get_posts

第3。使用WP_Query - 注意,这会重置循环

WP_Query完全重置循环,所以如果使用它,那么您需要在$args中传递类别ID,以便Wordpress仅返回该类别中的帖子。

// get the category id in the query before we reset it using WP_Query
$categoryid = $wp_query->get_queried_object_id();

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
    'category'       => $categoryid
    'posts_per_page' => 12,
    'paged'          => $paged
);

$the_query = new WP_Query($args);
if ($the_query->have_posts()) :

    // whatever you need to do before you start displaying the posts
    while ($the_query->have_posts()) : $the_query->the_post();

    // display your posts

    endwhile;
endif;
wp_reset_postdata();