web-dev-qa-db-fra.com

Vérifier l'image en vedette dans WP_Query

Existe-t-il un moyen de filtrer les publications en fonction de l'image sélectionnée lors de l'initialisation d'un objet WP_Query?

Exemple

$my_query = WP_Query(array("has_thumbnail"=>true));

ou plus idéalement

$my_query = WP_Query(array("has_thumbnail_size"=>"custom_size"));
3
Mild Fuzz

L'image technique est un champ personnalisé avec le nom _thumbnail_id qui contient l'ID de pièce jointe. Donc, vous pouvez facilement interroger avec quelque chose comme:

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

La taille d’autre part est attribut de cette pièce jointe et ne se poste pas. Vous devrez parcourir les pièces jointes et obtenir les tailles correspondantes (si mes souvenirs sont exacts, elles devraient figurer dans les données renvoyées par wp_get_attachment_metadata() ).

7
Rarst

Voici une autre approche consistant à filtrer les publicationsafterla requête en utilisant si la fonction wp_get_attachment_thumb_url() renvoie une chaîne vide pour déterminer si la publication comporte une vignette (image sélectionnée).

//get all the posts however your query does it. simple example when there aren't a lot: 
$args = array("nopaging" => true);
$posts = (new WP_Query($args))->posts;

//filter the posts array by looking up the thumb_url and seeing if it's empty
$posts_without_thumbnails = array_filter($posts,  function($post){
  $post_thumbnail_id = get_post_thumbnail_id( $post->ID );
  return ( wp_get_attachment_thumb_url( $post_thumbnail_id ) == "");
} );

Si vous avez besoin que cela se produise pendant la requête, vous pouvez probablement en faire un filtre wordpress ou une action ou intercepter le query_posts .

0
yuvilio