Consultar entradas solo con imagen destacada
Quiero consultar 6 entradas, pero solo aquellas que tengan una imagen destacada adjunta. Estoy usando el método meta_key
con WP_Query
de la siguiente manera:
$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; ?>
Esto no parece funcionar. La consulta está devolviendo más de 6 entradas e incluso aquellas que no tienen imagen destacada. ¿Alguna idea de qué he hecho mal?
@chip: var_dump($query);
proporciona un resultado muy extenso así que lo he publicado en un pastebin

A partir de WordPress 3.5, los Parámetros de Consulta Meta admiten EXISTS
y NOT EXISTS
como operadores de comparación. En los casos donde utilices estos operadores, puedes omitir la parte de value
en la consulta meta. Prueba los siguientes argumentos para tu consulta:
$args = array(
'post_type' => 'post',
'posts_per_page' => 6,
'meta_query' => array(
array(
'key' => '_thumbnail_id',
'compare' => 'EXISTS'
),
)
);

Gracias por la sugerencia. Ahora obtengo los 6 posts, pero todavía aparecen posts sin miniaturas.

Probé esto y funcionó para mí. Pero noté que devolverá entidades que tienen el meta configurado, pero por alguna razón ese ID de adjunto no es correcto. Así que verifica dos veces que tus posts tengan configuradas las imágenes destacadas. De lo contrario, no sé cuál podría ser el problema.

harryg, ¿puedes confirmar que estás usando la versión 3.5 o posterior?

Sí, estoy ejecutando la última versión de WordPress - recién instalada en mi servidor de desarrollo local como una configuración de red (multisitio).

Solo información adicional: Hay un error no resuelto, consulta ticket trac 23268, que hace necesario usar un valor si se utiliza NOT EXISTS
.

Al ejecutar el importador, debes marcar la casilla para descargar e importar todos los medios/adjuntos, y el servidor original debe estar accesible desde el servidor que realiza la importación.
Si no haces esto, las publicaciones no tendrán una imagen destacada válida, no aparecerán en tu bucle y cualquier intento de llamar a the_post_thumbnail
fallará, dando la impresión de que no tienen imagen destacada.
Para solucionar esto, elimina tus publicaciones y vuelve a importar usando la configuración correcta, asegurándote de que el servidor antiguo siga siendo accesible en su URL original.
También, para demostrar el punto, no hiciste ningún intento de verificar realmente las publicaciones, siempre verifica, por ejemplo:
if ( $query->have_posts() ) { // nunca verificaste si no se encontraron publicaciones
while($query->have_posts()) { // la sintaxis alternativa no funciona con la mayoría de los IDEs
// cada declaración individual debe estar en una línea individual
$query->the_post();
// solo necesitas etiquetas de apertura/cierre aquí, no en cada línea, ahorra tiempo al escribir
?><h2><?php the_title(); ?></h2><?php
// solo muestra la miniatura si realmente tiene una
if ( has_post_thumbnail() ) {
echo '<p>la publicación dice que tiene una imagen destacada</p>'; // verificando doblemente
the_post_thumbnail('thumbnail');
} else {
echo '<p>esta publicación no tiene una imagen destacada</p>';
}
}
} else {
echo '<p>no se encontraron publicaciones</p>';
}
Si no has marcado la casilla, obtendrás imágenes que dicen tener una imagen destacada, pero no se mostrará ninguna imagen

Sospecho que esta es la razón por la que la respuesta que proporcioné no está funcionando como se esperaba. El plugin WordPress Suicide es bastante útil para eliminar todo el contenido.

Definitivamente marqué esa casilla. Sin embargo, en mi experiencia nunca ha funcionado para mí. Todas las imágenes estaban enlazadas de vuelta al sitio externo. Utilicé el plugin Import External Images (http://wordpress.org/extend/plugins/import-external-images/) para almacenar las imágenes localmente y adjuntarlas.

He tenido el mismo pensamiento, definitivamente marqué la casilla, ¿por qué sigue sin funcionar? Lo he visto con clientes, y es tan fácil equivocarse, así que borra tus publicaciones, vuelve a importar y asegúrate de que esté marcada, y si aún no funciona entonces puedes descartarlo. De lo contrario, hay una charla de Neil DeGrasse Tyson sobre lo patéticamente débil que es la memoria humana. En este momento podría pedirte que desmarques la segunda casilla y probablemente recordarías haberla visto también (pero no hay una).

y mientras tanto, envuelve the_post_thumbnail
con una llamada a has_thumbnail
y añade un caso else para que sepas de forma definitiva y clara que la entrada no tiene una imagen destacada

También asegúrate de que tu servidor puede conectarse al servidor remoto. Si tu servidor no puede realizar solicitudes remotas, no podrá importar. Es posible que necesites eliminar los archivos adjuntos de medios que ya se han descargado

@Tom gracias por tus comentarios. Sé que dices que es fácil olvidar hacer algo, pero SÉ que marqué la casilla. El problema es que muchas veces no ha funcionado para mí; marco la casilla pero ninguna de las imágenes se importa y me encuentro con que todas las entradas tienen imágenes enlazadas externamente. Mi servidor es una configuración simple de Xampp ejecutándose en MacOS que sí tiene acceso remoto. Tengo la sensación de que es una combinación de que falla la casilla y el plugin que usé para descargar todas las imágenes no "destacó" correctamente las imágenes. Probaré tus sugerencias esta noche y te informaré

¿XAMPP es una herramienta solo para Windows? En lugar de discutir sobre lo que crees saber y tus sentimientos, demuéstralo mediante el código de depuración y publica datos útiles, claros y concretos. Las mayúsculas no te ayudarán. He podido recrear este problema muchas veces localmente y en servidores de clientes marcando o desmarcando la casilla, e incluso he cometido el error yo mismo, y actualmente es la teoría más precisa dada la información proporcionada. Si no estás de acuerdo, proporciona nueva información para que podamos llegar a una teoría mejor.

¡No, XAMPP funciona bien en Mac también! Desafortunadamente no hay evidencia concreta de si marqué o no la casilla, pero eso es irrelevante. El problema ocurre porque la importación de medios falló: el post cree que tiene una imagen destacada ya que la etiqueta meta está presente, pero no hay una imagen real. Agregar una nueva imagen destacada y luego eliminarla evita que el post aparezca, demostrando que la consulta funciona, que es lo que quería saber. Gracias por las sugerencias.
