Get 1 more post in loop

时间:2013-10-02 作者:GhostToast

例如,在简单循环中:

$loop = new wp_query(array(\'posts_per_page\' => 3));

while($loop->have_posts()) : $loop->the_post();
    if(get_post_meta($post->ID, \'skip_me\', true) == true){
        // do something to ask for one more post, 
        // as we really want 3 total!
        continue;
    } else {
        the_content();
    }
endwhile;
如果满足某个条件,我们可能会跳过一个帖子,但如果我们仍然真的想得到3个帖子呢?与其任意要求额外的职位,然后在3次成功后停止,还有没有其他方法可以要求循环,获得更多的职位?

我想在这个确切的例子中,最简单的方法是meta_query 在参数中。但如果不是那么容易呢?

2 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

你可能应该add a meta query to your WP_Query() args:

$loop = new wp_query(
    array(
        \'posts_per_page\' => 3,
        // Meta Query
        \'meta_query\' => array(
            array(
                \'key\' => \'skip_me\',
                \'value\' => \'true\',
                \'compare\' => \'!=\'
            )
        )
    ) 
);
或者,在这种情况下,您可以使用更简单的版本:

$loop = new wp_query(
    array(
        \'posts_per_page\' => 3,
        // Meta Query
        \'meta_key\' => \'skip_me\',
        \'meta_value\' => \'true\',
        \'meta_compare\' => \'!=\'
    ) 
);
在这两种情况下,具有“skip\\u me”元值“true”的帖子将不会包含在查询的对象中。

SO网友:s_ha_dum

虽然我很好奇如何在没有meta\\u查询的情况下做到这一点。。。

您不能“要求”该查询获取另一篇文章,您只需运行另一个查询,但这将很快变得复杂,更不用说服务器的劳动密集型了。类似这样(未经测试):

$loop = new wp_query(array(\'posts_per_page\' => 3));
$grab_more = false;
while($loop->have_posts()) { 
    $loop->the_post();
    if ($grab_more) {
        $more = new wp_query(array(\'posts_per_page\' => 1,\'offset\' => 3));
        if(!empty($more->posts[0])) {
            setup_postdata($more->posts[0]);
        }
        $grab_more = false;
    }
    if(get_post_meta($post->ID, \'skip_me\', true) == true){
        // do something to ask for one more post, 
        // as we really want 3 total!
        echo \'get more\';
        $grab_more = true;
        continue;
    } else {
        echo \'the_content\';
        the_content();
    }
}
我确信那是辆马车。我在一分钟内就搞定了I am sure 它并不是在所有情况下都能正常工作——也许它在任何情况下都不能正常工作:)。这只是一点概念化。我不容易测试,但is not the right way to do this anyway. 例如,您可以使用它生成大量的数据库查询,而循环确实会减慢速度。方法是:

如果可能,请使用查询参数。这就是ChipBennet的建议,在您的示例案例中,这是正确的答案SQL 您可以使查询执行任何您想要的操作the right set of filters. 如果不能使用提供的查询参数,就我而言,这是唯一正确的选择。尝试这样嵌套查询是复杂的,而且是错误的

结束

相关推荐

Loop not showing first post

我在页面上设置了以下循环,但它缺少了第一篇帖子。有人知道为什么会这样吗?<div class=\"gallery\"> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div class=\"gallery-item\"> <a href=\"<?php esc_url( the_permalink() ); ?>\">