WP_Query: Como selecionar somente posts com thumbnail

Imagem em destaque em posts do WordPress é um ótimo recurso, principalmente para blogs de notícias que muitas vezes buscam matérias de fontes RSS ou outros blogs. Na maioria dos temas, quase todos, não é uma função comum poder definir somente posts com fotos aparecerão em determinadas áreas. Para isso você terá que colocar a mão no código! Com WP_Query, você precisa usar o filtro de “meta_query” em sua consulta com o operador de comparação para obter os resultados corretos, todas as outras formas de usar meta_key com os argumentos não funcionaram.

Eu vou mostrar 2 maneiras de fazer isso, uma delas para quem está com pressa e a outra para quem realmente quer ir a fundo no problema.

Opção Rápida

Vamos dizer que você esteja montando um modelo de página que puxará somente posts com imagens destacadas (thumbnail). Para buscar os posts usamos a chamada WP_Query com os $args e dentro da variável de argumentos estará o filtro de metadados:

$args = array(   	'post_type' => 'post',   	'posts_per_page' => 1 ,   	'meta_query' => array(  		array(  			'key'     => '_thumbnail_id',  			'value'   => '',  			'compare' => '!=',  		     )	));  $posts = new WP_Query( $artgs);

OPÇÃO COMPLETA

O código abaixo pode ser inserido no seu functions.php e chamado de qualquer template ou página que for criar:

function get_posts_with_thumb($posts_per_page=10, $page=1, $user_id='' ){      $offset = ($page * $posts_per_page) - $posts_per_page;       $args = array( 'author'=>$user_id,                 'posts_per_page' => $posts_per_page,  			   'offset'           => $offset,  			   'orderby'          => 'post_date',  	                   'order'            => 'DESC',  			   'post_type'        => 'post',  			   'post_status'      => 'publish',                               		   'meta_query' => array(  		        array(  			'key'     => '_thumbnail_id',  			'value'   => '',  			'compare' => '!=',  		        )           	      )               );     $posts_with_photos =  new WP_Query( $args );     foreach($posts_with_photos->posts as $p){     	$aTemp = new stdClass();     	$thumb_id = (int)get_post_thumbnail_id($p->ID);  	$aTemp->post_id = $p->ID;  	$aTemp->author = $p->post_author;  	$aTemp->post_date = $p->post_date;  	$aTemp->title = $p->post_title;  	$aTemp->comment_count = $p->comment_count;	  	$aTemp->image = wp_get_attachment_image_src( $thumb_id, 'thumbnail');  	$aTemp->photo = wp_get_attachment_image_src( $thumb_id, 'full');          $aTemp->content = $p->post_content;     $oReturn->posts[] = $aTemp;       }  return $oReturn;    }

E ai você chama a função dessa maneira:

$posts = get_posts_with_thumb();  // ou com argumentos args  $posts = get_posts_with_thumb($posts_per_page=10, $page=1, $user_id=28);     print_r($posts);

Farei mais publicações rápidas e objetivas como essa, geralmente com algo que eu demorei para encontrar a solução e pode facilitar o seu projeto. Deixa seu comentário e contribua para o blog!

Base deste conteúdo

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *