Here’s some quick code to query how many posts do and do not have a featured image
<?php
if( php_sapi_name() !== 'cli' ) {
die("Meant to be run from command line");
}
function find_wordpress_base_path() {
$dir = dirname(__FILE__);
do {
//it is possible to check for other files here
if( file_exists($dir."/wp-config.php") ) {
return $dir;
}
} while( $dir = realpath("$dir/..") );
return null;
}
define( 'BASE_PATH', find_wordpress_base_path()."/" );
define('WP_USE_THEMES', false);
global $wp, $wp_query, $wp_the_query, $wp_rewrite, $wp_did_header;
require(BASE_PATH . 'wp-load.php');
echo "Base: " . find_wordpress_base_path()."/\n\r";
echo "Upload DIR: " . wp_upload_dir()['path'] . "\n\r";
echo "Posts: " . wp_count_posts()->publish."\n\r";
$query = array (
'posts_per_page' => -1,
'post_type' => 'post',
'meta_key' => '_thumbnail_id',
'meta_compare' => 'EXISTS',
);
$my_query = new WP_Query($query);
$posts_with_thumb = $my_query->post_count;
echo "Posts with thumbnail_id: " . $posts_with_thumb . "\n\r";
$query = array (
'posts_per_page' => -1,
'post_type' => 'post',
'meta_key' => '_thumbnail_id',
'meta_compare' => 'NOT EXISTS',
);
$my_query = new WP_Query($query);
$posts_without_thumb = $my_query->post_count;
echo "Posts without thumbnail_id: " . $posts_without_thumb . "\n\r";
?>
It’s made to run from the terminal NOT as a wordpress plugin, just place it in the root wordpress folder and run with php <filename>
It will output something like
Base: /var/www/{folder}/
Upload DIR: /var/www/{folder}/wp-content/uploads
Posts: 8547
Posts with thumbnail_id: 6824
Posts without thumbnail_id: 1723
Took a few seconds to return, it’s probably not the best way of doing it, but worked for what I wanted. I’d like to give credit for each bit of code but really no idea what I got the different bits from.