【WordPress】アイキャッチ画像を設定している記事を出力したい《メモ》

たまーにあるこの仕様(?)を覚えておくためにメモ。

お知らせ一覧で、アイキャッチ画像が最大4件表示したい場合。
foreachやwhileなどのループ後に if (has_post_thumbnail()) を使用してみたが、最大2件しか表示されず2時間ぐらい悩んでました…。

解決したやり方

参考記事:【wordpress】アイキャッチ画像が設定されている記事のみを出力する方法

参考記事のおかげで、wp_queryのパラメータでアイキャッチ画像の記事だけを取り出せました。ありがとうございます。

実際に使用したコードはこちら

※諸事情のため一部変更しています

<?php
$myposts = get_posts(
  array(
    'posts_per_page' => '4',
    'order' => 'DESC',
    'orderby' => 'post_date',
    'category' => '1', //今回はカテゴリーIDを使用しました
    'meta_key' => '_thumbnail_id', //サムネイルIDがある記事
  )
);
if ($myposts):
  foreach ($myposts as $post):
    setup_postdata($post);
    //ループ内処理
  endforeach;
  wp_reset_postdata(); // 必須:メインクエリ(元のページデータ)を安全に復元
endif;
?>

ちなみにアイキャッチ画像がない記事だけの一覧も作ったのでそちらもメモ

<?php
$myposts = get_posts(
  array(
    'posts_per_page' => '4',
    'order' => 'DESC',
    'orderby' => 'post_date',
    'category' => '1', //同じくカテゴリーIDを使用しました
    'meta_key' => '_thumbnail_id', //サムネイルIDがある記事
    'meta_compare' => 'NOT EXISTS', //サムネイルIDがある記事は出力しない
  )
);
if ($myposts):
  foreach ($myposts as $post):
    setup_postdata($post);
    //ループ内処理
  endforeach;
  wp_reset_postdata(); // 必須リセット
endif;
?>

私的に何度か使ったことがあるのでメモしとこうかなと思いました。

ちなみに、get_postsで記事データを持ってきたら、foreach開始後、setup_postdata($post)を書くのを忘れないように。ループ内でWordPress関数が正しく使えるようになります。foreach終了後は、wp_reset_postdata();で必ずリセットさせる。

  • X