Academia WordPress

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!

BLING
Daniel Leal

Daniel Leal

Eu escrevo para facilitar o aprendizado de outros daquilo que eu tivesse dificuldade em aprender. WordPress, WooCommerce e desenvolvimento de novas tecnologias são meus focos principais, mas marketing de conteúdo, negócios digitais e (mais recentemente) fintechs também ocupam uma parcela das minhas ideias e projetos.

Add comment

Digital Ocean

Send this to a friend