web-dev-qa-db-ja.com

注目の画像のみで投稿を検索する

私は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つ以上の投稿と、おすすめの画像がない投稿を返しています。私がここで間違っているという考えはありますか?

@chip:var_dump($query);は大きな結果を与えるので、私は ペーストビンに投稿しました

13
harryg

インポーターを実行しているとき、すべてのメディア/添付ファイルをダウンロードしてインポートするには、チェックボックスをオンにする必要があります。

そうしないと、投稿にはまだおすすめの画像セットがありますが、それらが参照する添付ファイルは無効になり、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>';
}

チェックボックスをオンにしていない場合は、注目の画像があるという画像が表示されますが、画像は表示されません。

1
Tom J Nowell

WordPress 3.5以降、 メタクエリパラメータ は比較演算子としてEXISTSNOT EXISTSをサポートします。これらを使用している場合は、メタクエリのvalue部分を省略できます。クエリに次の引数を試してください。

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