WP_QUERY条件影响POSTS_PER_PAGE计数

时间:2014-12-27 作者:MultiformeIngegno

我正在尝试创建一个新的WP_Query 显示cat 1中没有缩略图的最后5篇文章。这实际上是可行的:

<?php
$the_query = new WP_Query( \'cat=1&posts_per_page=5\' );
while ( $the_query->have_posts() ) :
    $the_query->the_post(); if ( ! has_post_thumbnail() ) { ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php } endwhile; 
wp_reset_query();
wp_reset_postdata(); 
?>
但我们可以说,在最后5篇帖子中,有3篇有缩略图;在这种情况下,仅显示2篇文章。我想要5个作为固定数量的posts_per_page 如果循环中的帖子带有缩略图,则会显示较旧的帖子(达到5个),而不是只显示2个没有缩略图的帖子。

我试着把if 之前$the_query 但它没有起作用。

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

您可以尝试通过以下方式获取没有特色图像的帖子:

$ppp = 5; // posts per page

/**
 * Fetch $ppp posts, without thumbnails, in a given category:
 */
$args = array(
    \'cat\'            => 1,
    \'posts_per_page\' => $ppp,
    \'meta_query\' => array(
        array(
            \'key\'     => \'_thumbnail_id\',
            \'compare\' => \'NOT EXISTS\',
        ),
    ),
);
$myposts = get_posts( $args );
但如果没有足够的帖子,没有特色图片,那该怎么办?那么,我们就可以在其余的帖子中添加特色图片:

/**
 * Fetch $ppp-x posts in a given category, with thumbnails, if x > 0:
 */
if( $count = count( $posts ) < $ppp ) 
{  
    $args = array(
        \'cat\'            => 1,
        \'posts_per_page\' => $ppp - $count,
        \'meta_query\' => array(
            array(
                \'key\'     => \'_thumbnail_id\',
                \'compare\' => \'EXISTS\',
            ),
        ),
    );
    $myposts = array_merge( $posts, get_posts( $args ) );
}
然后,您可以使用以下设置循环:

global $post;
foreach( $myposts as $post ) 
{
    setup_postdata( $post );
    ?><li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li><?php
}
wp_reset_postdata();
您可能还想检查在相应类别中是否有足够的帖子。

请注意,这是未经测试的,但我希望您可以根据需要修改它。

附言:如果我没记错的话,@kaiser已经解决了一般情况下类似的问题,添加了一些额外的味道;-)

我会添加一个链接,如果我找到它。

Update: 找到了here, 我想。那边有一些有趣的答案。

结束

相关推荐

The Loop in Static Page

我对环路有一些问题。我以“Twenty14”主题为例。我正在使用基本循环创建2个php文件。一个是家。其中一个是名为示例页的模板页。php。两者都包含此代码;if( have_posts() ) : while( have_posts() ) : the_post(); the_content; endwhile; endif; 没什么特别的,唯一的区别是我在示例页面上有模板声明。php/** * Template Nam