web-dev-qa-db-fra.com

Comment afficher uniquement les publications avec les images?

Je souhaite masquer les publications sans images sur la page d'accueil. Je dois donc obtenir un tableau d'identifiants de ces publications.

Je sais comment masquer les publications sur la page d'accueil par identifiant, mais je ne dois afficher que les publications avec images. C'est ce que j'ai déjà:

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

Pas besoin de post-ids qui n'a pas de vignette. Utilisez la méta requête pour obtenir uniquement ceux qui ont une vignette.

Ajouter une méta requête

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' );

Ou utilisez une requête personnalisée.

$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