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