web-dev-qa-db-ja.com

WP_Queryを使用してサムネイル付きの投稿のみを表示する

ループを使用して画像を特集している投稿のみを表示するのは難しいです。私のPHPレベルは基本的なもので、どんな助けでも本当に役に立ちます。

だから基本的にこれは私の元のコードです:

if( have_posts() ) { 
    while( have_posts() ) { 
        the_post();
        get_template_part( 'inc/template-parts/content', $post_layout );
        // and some other stuff
    }
}

このスレッドからアドバイスを受けました - 投稿のWP_Queryにサムネイルがあるかどうかを確認するにはどうすればよいですか。 しかし、何の成功もありません。コードを実装すると、すべての投稿がフロントページから消えます。

これは私が試したコードです:

$query = new WP_Query( $thumbs );
$thumbs = array(
    'meta_query' => array( 'key' => '_thumbnail_id' ) 
);
if( $query->have_posts() ) { 
    while( $query->have_posts() ) { 
        $query->the_post();
        get_template_part( 'inc/template-parts/content', $post_layout );
    } 
} 

任意のアドバイスは大歓迎です!よろしく

2
tslid

あなたはあなたの引数を定義する必要があります/あなたは後ではなくWP_Queryに渡します。また、あなたのmeta_queryは単なる配列ではなく、配列の配列であるべきです。

この

 $query = new WP_Query($thumbs);
 $thumbs = array(
        'meta_query' => array('key' => '_thumbnail_id') 
 );

こんな感じ

 $thumbs = array(
    'meta_query' => array( 
        array(
            'key' => '_thumbnail_id'
        ) 
    )
 );

 $query = new WP_Query($thumbs);

編集

ちょっとしたメモ

  • カスタムクエリの後にpostdataをリセットするようにしてください。 ifステートメントを閉じる前、およびwhileステートメントを閉じた直後にwp_reset_postdata();を追加するだけです。

  • ここではカスタムクエリは必要ないかもしれないと思います。私があなたの質問を正しく読んだならば、あなたはメインクエリを変更するために単にpre_get_postsを使うことができます。メインクエリを変更したいという理由だけで、カスタムクエリを使用しないでください。

9
Pieter Goosen