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.