【WordPress】get_postsでアイキャッチ画像あり・なしの投稿一覧を取得する方法

【WordPress】get_postsでアイキャッチ画像あり・なしの投稿一覧を取得する方法

2018.5.4

アイキャッチの有無で条件分岐する場合はhas_post_thumbnail()で振り分けすればいいのですが…

今回は投稿一覧を取得する段階でアイキャッチ画像がある・ないで絞り込みをする必要が出てきたので、get_posts()でのパラメーターの指定方法をメモしておきます。

カスタムフィールドを条件にして絞り込む

get_postsで アイキャッチ画像のあり・なしの絞り込みをするときはカスタムフィールド_thumbnail_idを条件に絞り込みをすると良さそうです

まずは試しに投稿一覧を表示してみた

まずは試しに以下のような投稿一覧を表示するコードを作ってみました

<?php
    $posts = get_posts( array(
        'posts_per_page' => 5,
    ) );
    if ( $posts ) :
        foreach ( $posts as $post ) :
?>
    <h2><?php echo esc_html( $post->post_title ); ?></h2>
    <?php
    if ( has_post_thumbnail( $post->ID ) ) {
        echo get_the_post_thumbnail( $post->ID, 'thumbnail' );
    }
    ?>
<?php
    endforeach;
endif;
?>

このコードにアイキャッチでの絞り込みを加えていきます

アイキャッチ画像「あり」で絞り込む

アイキャッチ画像ありで絞り込みをする場合はmeta_key_thumbnail_idを指定するだけでOKです

<?php
    $posts = get_posts( array(
        'posts_per_page' => 5,
        'meta_key'       => '_thumbnail_id',
    ) );
    if ( $posts ) :
        foreach ( $posts as $post ) :
?>
    <h2><?php echo esc_html( $post->post_title ); ?></h2>
    <?php
    if ( has_post_thumbnail( $post->ID ) ) {
        echo get_the_post_thumbnail( $post->ID, 'thumbnail' );
    }
    ?>
<?php
    endforeach;
endif;
?>
アイキャッチが指定された記事のみ絞り込みが出来た

期待通り、アイキャッチ画像が指定された投稿だけ表示されました!

アイキャッチ画像「なし」で絞り込む

アイキャッチ画像「なし」の絞り込みをする場合は、「カスタムフィールドに_thumbnail_idが無い投稿」が条件になります

カスタムフィールドでの絞り込みに使えるパラメータを探して…

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Query#Custom_Field_Parameters

meta_compareNOT EXISTSを指定してあげます

<?php
    $posts = get_posts( array(
        'posts_per_page' => 5,
        'meta_key'       => '_thumbnail_id',
        'meta_compare'   => 'NOT EXISTS',
    ) );
    if ( $posts ) :
        foreach ( $posts as $post ) :
?>
    <h2><?php echo esc_html( $post->post_title ); ?></h2>
    <?php
    if ( has_post_thumbnail( $post->ID ) ) {
        echo get_the_post_thumbnail( $post->ID, 'thumbnail' );
    }
    ?>
<?php
    endforeach;
endif;
?>
アイキャッチなしの投稿だけ表示できた

無事アイキャッチの無い投稿だけが表示されました

まとめ

ループ内であればhas_post_thumbnail()で条件分岐できますが、そもそも投稿一覧を取得する段階で絞り込みする場合は今回のような条件を指定してあげる必要がありますね

もし必要になりましたご参考にしてみて下さい。

ではまた。