Is there a way to filter posts by featured image when initialising a WP_Query object?
Example
$my_query = WP_Query(array("has_thumbnail"=>true));
or, more ideally
$my_query = WP_Query(array("has_thumbnail_size"=>"custom_size"));
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It only takes a minute to sign up.
Sign up to join this communityTechnically featured image is custom field with name _thumbnail_id
that holds attachment ID. So you can easily query with something like:
$args = array(
'meta_query' => array(
array(
'key' => '_thumbnail_id',
)
)
);
$query = new WP_Query( $args );
Size on other hand is attribute of that attachment and not post itself. You will need to loop through attachment and get sizes they have (if I remember right it should be in data returned by wp_get_attachment_metadata()
).
Here's an alternate approach of filtering the posts after the query using whether the wp_get_attachment_thumb_url()
returns an empty string to determine if the post has a thumbnail (featured image).
//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 ) == "");
} );
If you need this to happen during the query, you can probably make a wordpress filter or action out of it or intercept the query_posts.