仅显示一定数量的帖子,具体取决于查询中可用帖子的数量

时间:2013-12-20 作者:Sarah

我正在尝试为一个帖子滑块编写一些代码,目前我的代码涉及两个WP_Querys、 一个在另一个里面,但我忍不住觉得可能有一种更有效的方式来实现我想要实现的目标。

步骤包括:

使用WP\\u查询,检查某一帖子类型的已发布帖子数量=4,我想在页面中添加一个滑块,所以我开始打印滑块容器$num_posts) 计算出我想在下一次查询中打印多少帖子。如果有>=12可用,我想打印全部12。如果有8到11个,我只想打印8个。如果有4到7个可用,我只想打印出4个$postsToPrint) 进入showposts 作为第二个WP\\u查询的参数WP_Querys这似乎效率低下。

此处代码说明:

    // Initial query which only exists so I can count available posts

    $args = array (
        \'post_type\'              => \'mytheme_posttype\',
        \'post_status\'            => \'publish\',
        \'showposts\' => 12
    );

    $sliderQuery = new WP_Query( $args );


    // Count how many available posts there are for my slider
    $num_posts = $sliderQuery->post_count;

    if ($num_posts >=4) : ?>

    // Want to add a slider if posts >= 4, so start printing out slider container HTML here.

    // I then want to check how many posts were collected in the above query, and only print out a certain number depending on how many there are available

        // if there are 12 available posts, print out all 12
        if ($num_posts >= 12) {
            $postsToPrint = 12;
        }

        //  else if there are between 8 and 11 available posts, only print out 8
        elseif ($num_posts >=8) {
            $postsToPrint = 8;
        }

        // if there are between 4 and 7 available posts, only print out 4
        else {
            $postsToPrint = 4;
        }

        // Second query for actually printing out posts.

        $args = array (
            \'post_type\'              => \'mytheme_posttype\',
            \'post_status\'            => \'publish\',
            \'showposts\' => $postsToPrint
        );

        $loop = new WP_Query( $args );

        while ( $loop->have_posts() ) : $loop->the_post();

            // print out post thumbnail and some other post data in slider

        endwhile;

        // close slider container HTML

    endif;
谢谢!

1 个回复
最合适的回答,由SO网友:tfrommen 整理而成

你不必运行两个查询,因为你已经得到了你想要的(甚至更多)。

$args = array (
    \'post_type\' => \'mytheme_posttype\',
    \'post_status\' => \'publish\',
    \'numberposts\' => 12,
);
$sliderQuery = new WP_Query($args);

$num_posts = $sliderQuery->post_count;
if ($num_posts >=4) {

    if ($num_posts >= 12)
        $postsToPrint = 12;
    elseif ($num_posts >=8)
        $postsToPrint = 8;
    else
        $postsToPrint = 4;

    while ($sliderQuery->have_posts() && $postsToPrint--) {
        $sliderQuery->the_post();

        // Work with the post
    }
}
// EDIT<好的,这里有一些关于发生了什么以及如何/为什么这样做的解释。。。

开始$postsToPrint 设置为您想要的内容(即4、8或12-取决于帖子总数)。然后我们递减计数器变量($postsToPrint-- 与相同$postsToPrint = $postsToPrint - 1). 只要我们还没有检索到我们想要的那么多帖子,我们就继续。如果我们已经达到定义的最大帖子数量,我们就会中断(即离开)循环。

因此,上述while() 是以下完全扩展版本的有效版本:

while ($sliderQuery->have_posts() && $postsToPrint > 0) {
    $sliderQuery->the_post();

    // Work with the post

    // We\'ve handled another post, so decrement the number of posts to be handled
    $postsToPrint = $postsToPrint - 1;
}
我希望这能让事情变得更清楚一点。。。

结束

相关推荐

How to 301 all posts

我目前正在使用域/%postname%/但我希望将其更改为域/文件夹/%postname%/-我不确定如何301所有帖子。如果我要使用重定向301/$域/文件夹/$之类的东西,我想这可能也会将所有页面、档案等重定向到相同的结构,这是我不想要的。如何仅针对帖子执行此操作?谢谢