仅查询带有特色图片的帖子

时间:2013-03-03 作者:harryg

我想查询6篇帖子,但只查询那些附有特色图片的帖子。我正在使用meta_key 用于此的方法WP_Query 因此:

$args = array(
    \'post_type\'  => \'post\',
    \'meta_key\' => \'_thumbnail_id\',
    \'post_count\' => 6 );
$query = new WP_Query($args);
之后是

<?php while($query->have_posts()) : $query->the_post(); ?>
    <h2><?php the_title(); ?></h2>
    <?php the_post_thumbnail(\'thumbnail\'); ?>
<?php endwhile; ?>
这似乎不起作用。该查询返回了6篇以上的帖子以及那些没有特色图片的帖子。你知道我做错了什么吗?

@芯片:var_dump($query); 给出了一个很大的结果,所以我在pastebin

2 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

运行导入器时,必须选中该复选框才能下载和导入所有媒体/附件。

如果您不这样做,帖子仍将有一个特色图像集,但它们引用的附件将无效,并且任何尝试调用the_post_thumbnail 将失败。使用你的代码,你只会得到文章标题,而没有缩略图。这会给人一种印象,没有特色图片的帖子正在被拉进来。事实并非如此,他们有一个特色图片,只是因为导入时出错而无法使用。

删除帖子,然后使用正确的设置重新导入。

为了证明这一点,您没有尝试实际检查帖子,始终检查,例如:

if ( $query->have_posts() ) { // you never checked to see if no posts were found
    while($query->have_posts()) { // alt style syntax doesn\'t work with most IDEs
        $query->the_post(); // individual statement should be on individual line
        ?><h2><?php the_title(); ?></h2><?php // you only need open/close tags here, not every line, save yourself some time typing
        if ( has_post_thumbnail() ) { // only print out the thumbnail if it actually has one
            echo \'<p>post says it has a featured image</p>\'; // double checking
            the_post_thumbnail(\'thumbnail\');
        } else {
            echo \'<p>this post does not have a featured image</p>\';
        }
    }
} else {
    echo \'<p>no posts found</p>\';
}
如果您没有选中该复选框,您将看到图像,表明他们有一个特色图像,但没有显示任何图像

SO网友:helgatheviking

从WordPress 3.5开始Meta Query Parameters 支持EXISTSNOT EXISTS as比较运算符。在使用这些的情况下,可以省略value 元查询的一部分。请尝试以下查询参数:

$args = array(
   \'post_type\'  => \'post\',
   \'posts_per_page\' => 6,
    \'meta_query\' => array(
        array(
         \'key\' => \'_thumbnail_id\',
         \'compare\' => \'EXISTS\'
        ),
    )
);

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post