web-dev-qa-db-ja.com

画像付きの投稿のみを表示する方法

フロントページに画像のない投稿を非表示にしたいので、それらの投稿のIDの配列を取得する必要があります。

ホームページ上の投稿をIDで非表示にする方法はわかっていますが、画像付きの投稿のみを表示する必要があります。これは私がすでに持っているものです:

function exclude_post($query) {

  if ($query->is_home)  {
      $query->set('post__not_in', array(1,2) );
  } 
    return $query; 
}
add_filter('pre_get_posts','exclude_post');
1
Tolik

サムネイルのない投稿IDは不要です。サムネイルを持っているものだけを取得するにはメタクエリを使用してください。

メタクエリを追加

function get_only_posts_with_images( $query ) {

  if ( $query->is_home() && $query->is_main_query() )  {
      $query->set( 'meta_query', array( array( 'key' => '_thumbnail_id' ) ) );
  }

}
add_action( 'pre_get_posts', 'get_only_posts_with_images' );

またはカスタムクエリを使用してください。

$query = "
  SELECT posts.* 
  FROM $wpdb->posts AS posts
  INNER JOIN $wpdb->posts AS attachment 
    ON attachment.`post_parent`=posts.`ID` 
      AND attachment.`post_type`='attachment' 
  WHERE posts.`post_type`='post'
";

$posts_with_images = $wpdb->get_results( $query, OBJECT );
3
Rene Korss