Consultar postagens apenas com imagem em destaque

15

Quero consultar 6 postagens, mas apenas aquelas que têm uma imagem em destaque anexada. Estou usando o meta_keymétodo para isso com WP_Querycomo tal:

$args = array(
    'post_type'  => 'post',
    'meta_key' => '_thumbnail_id',
    'post_count' => 6 );
$query = new WP_Query($args);

Seguido por

<?php while($query->have_posts()) : $query->the_post(); ?>
    <h2><?php the_title(); ?></h2>
    <?php the_post_thumbnail('thumbnail'); ?>
<?php endwhile; ?>

Isso não parece funcionar. A consulta está retornando mais de 6 postagens e também aquelas que não têm uma imagem em destaque. Alguma idéia do que eu tenho de errado aqui?

@chip: var_dump($query);fornece um grande resultado, então eu o publiquei em um pastebin

harryg
fonte
2
O trecho de código funcionou para mim como esperado. Talvez o erro esteja em outra parte do código.
precisa saber é o seguinte
Do que você ganha var_dump( $query )?
Chip Bennett
Como uma coisa extra, pensei - as postagens foram importadas para o meu servidor local de um site ao vivo usando o exportador / importador do wordpress. Todas as postagens originais apresentavam imagens que obviamente estavam perdidas no processo de importação. Isso poderia significar que, embora as imagens em destaque tenham sido removidas, as meta-chaves ainda permanecem causando uma confusão na consulta?
harryg
Ao executar a importação, você marcou a caixa para baixar e anexar todos os anexos / mídia? Caso contrário, suas imagens em destaque não funcionarão. As mensagens terão uma imagem de destaque, mas vai ser fazendo referência a um anexo que não existe, e assim nunca será exibido
Tom J Nowell
Sim, marquei a caixa ao importar.
harryg

Respostas:

3

Ao executar o importador, você deve marcar a caixa de seleção para baixar e importar todas as mídias / anexos.

Caso contrário, as postagens ainda terão uma imagem em destaque definida, mas o anexo a que se referem será inválido e qualquer tentativa de chamada the_post_thumbnailfalhará. Usando seu código, você obteria apenas o título da postagem e nenhuma miniatura. Isso daria a impressão de que as postagens que não têm imagem em destaque estão sendo puxadas. Não é o caso, elas têm uma imagem em destaque, apenas não está disponível devido ao erro que você cometeu ao importar.

Exclua suas postagens e reimporte usando as configurações corretas.

Também para demonstrar o argumento, você não fez nenhuma tentativa de verificar as postagens, sempre verifique, por exemplo:

if ( $query->have_posts() ) { // you never checked to see if no posts were found
    while($query->have_posts()) { // alt style syntax doesn't work with most IDEs
        $query->the_post(); // individual statement should be on individual line
        ?><h2><?php the_title(); ?></h2><?php // you only need open/close tags here, not every line, save yourself some time typing
        if ( has_post_thumbnail() ) { // only print out the thumbnail if it actually has one
            echo '<p>post says it has a featured image</p>'; // double checking
            the_post_thumbnail('thumbnail');
        } else {
            echo '<p>this post does not have a featured image</p>';
        }
    }
} else {
    echo '<p>no posts found</p>';
}

Se você não tiver marcado a caixa de seleção, obterá imagens dizendo que elas têm uma imagem em destaque, mas nenhuma imagem é mostrada

Tom J Nowell
fonte
1
Suspeito que esse seja o motivo pelo qual a resposta fornecida não está funcionando conforme o esperado. o plugin suicídio do WordPress é bastante útil para excluir todo o conteúdo.
precisa saber é o seguinte
Definitivamente, marquei essa caixa. No entanto, na minha experiência, nunca funcionou para mim. Todas as imagens foram vinculadas ao site externo. Usei o plug-in Importar imagens externas ( wordpress.org/extend/plugins/import-external-images ) para armazenar as imagens localmente e anexá-las.
harryg
Eu tive o mesmo pensamento, eu definitivamente marquei a caixa, por que ainda não funciona? Já recebi dos clientes e é muito fácil cometer erros. Portanto, exclua suas postagens, importe-as novamente e verifique se estão verificadas. Se ainda assim não funcionar, você pode descartá-las. Caso contrário, há uma conversa de Neil DeGrasse Tyson sobre o quão pateticamente fraca é a memória humana. Agora eu poderia pedir-lhe para desmarcar a segunda tickbox e você provavelmente lembro de ter visto isso também (mas não há um)
Tom J Nowell
e, entretanto, envoltório the_post_thumbnailcom uma has_thumbnailchamada e adicione um caso outros para que você definitivamente inequivocamente sabe que o posto não tem uma imagem caracterizada
Tom J Nowell
Verifique também se o seu servidor é capaz de acessar o servidor remoto. Se o seu servidor não conseguir capturar solicitações remotas, não poderá importar. Talvez seja necessário excluir os anexos de mídia já capturados
Tom J Nowell
23

No WordPress 3.5, os Meta Query Parameters suportam EXISTSe NOT EXISTScomo operadores de comparação. No caso de você usá-las, você pode omitir a valueparte da meta consulta. Tente os seguintes argumentos para sua consulta:

$args = array(
   'post_type'  => 'post',
   'posts_per_page' => 6,
    'meta_query' => array(
        array(
         'key' => '_thumbnail_id',
         'compare' => 'EXISTS'
        ),
    )
);
helgatheviking
fonte
Obrigado pela sugestão. Agora eu recebo as 6 postagens, mas ainda recebo postagens sem miniaturas.
harryg
Eu testei isso e funcionou para mim. Mas notei que ele retornará entidades que possuem o meta-conjunto, mas, por algum motivo, o ID do anexo não está correto. Portanto, verifique se suas postagens têm as imagens em destaque definidas. Caso contrário, não sei mais o que poderia ser o problema.
precisa saber é o seguinte
harryg, você pode confirmar que está usando a versão 3.5 ou posterior?
Tom J Nowell
Sim, estou executando a versão mais recente do WordPress - instalada recentemente no meu servidor de desenvolvimento local como uma configuração de rede (multisite).
harryg
2
Apenas algumas informações adicionais: Há um erro não resolvido, consulte o trac ticket 23268 , que torna necessário o uso de um valor, se NOT EXISTSfor utilizado.
Nicolai