Consultar publicaciones solo con imagen destacada

15

Quiero consultar 6 publicaciones, pero solo aquellas que tienen una imagen destacada adjunta. Estoy usando un meta_keymétodo para esto 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; ?>

Esto no parece funcionar. La consulta está devolviendo más de 6 publicaciones y también aquellas que no tienen una imagen destacada. ¿Alguna idea de lo que me he equivocado aquí?

@chip: var_dump($query);da un gran resultado, así que lo publiqué en un pastebin

harryg
fuente
2
El fragmento de código funcionó para mí como se esperaba. Tal vez el error está en otra parte del código.
Ralf912
¿Qué se obtiene a partir de var_dump( $query )?
Chip Bennett
Como algo adicional, pensé: las publicaciones se importaron a mi servidor local desde un sitio en vivo utilizando el exportador / importador de WordPress. Todas las publicaciones originales tenían imágenes destacadas que obviamente se perdieron en el proceso de importación. ¿Podría eso significar que, aunque se eliminaron las imágenes destacadas, las teclas clave todavía permanecían causando que la consulta se estropeara?
harryg
Cuando ejecutó la importación, ¿marcó la casilla para descargar y adjuntar todos los archivos adjuntos / medios? Si no lo hizo, sus imágenes destacadas no funcionarán. Las publicaciones tendrán una imagen destacada, pero harán referencia a un archivo adjunto que no existe, por lo que nunca se mostrarán
Tom J Nowell
Sí, marqué la casilla al importar.
harryg

Respuestas:

3

Al ejecutar el importador, debe marcar la casilla de verificación para descargar e importar todos los medios / archivos adjuntos.

Si no lo hace, las publicaciones aún tendrán un conjunto de imágenes destacadas, pero el archivo adjunto al que hacen referencia no será válido, y cualquier intento de llamar the_post_thumbnailfallará. Usando su código obtendría solo el título de la publicación, y no una miniatura. Esto daría la impresión de que las publicaciones que no tienen imagen destacada se están introduciendo. Este no es el caso, tienen una imagen destacada, simplemente no está disponible debido al error que cometió al importar.

Elimine sus publicaciones y vuelva a importar utilizando la configuración correcta.

También para demostrar el punto, no intentaste verificar las publicaciones, siempre verifica, por ejemplo:

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

Si no ha marcado la casilla de verificación, obtendrá imágenes que indican que tienen una imagen destacada, pero no se muestra ninguna imagen

Tom J Nowell
fuente
1
Sospecho que esta es la razón por la que la respuesta que proporcioné no funciona como se esperaba. El complemento WordPress Suicide es bastante útil para eliminar todo el contenido.
helgatheviking
Definitivamente marqué esa casilla. Sin embargo, en mi experiencia, nunca me ha funcionado. Todas las imágenes fueron vinculadas al sitio externo. Utilicé el complemento Importar imágenes externas ( wordpress.org/extend/plugins/import-external-images ) para almacenar las imágenes localmente y adjuntarlas.
harryg
He pensado lo mismo, definitivamente marqué la casilla, ¿por qué no funciona todavía? Lo he recibido de clientes, y es muy fácil equivocarse, así que elimine sus publicaciones, vuelva a importar y asegúrese de que esté marcado, y si aún no funciona, puede descartarlo. De lo contrario, hay una charla de Neil DeGrasse Tyson sobre cuán patéticamente débil es la memoria humana. En este momento, podría pedirle que desmarque la segunda casilla de verificación y probablemente recordará haberlo visto también (pero no hay ninguno)
Tom J Nowell
y mientras tanto, finalice the_post_thumbnailcon una has_thumbnailllamada y agregue un caso más para que definitivamente sepa claramente que la publicación no tiene una imagen destacada
Tom J Nowell
También asegúrese de que su servidor pueda llegar al servidor remoto. Si su servidor no puede tomar solicitudes remotas, no podrá importar. Es posible que necesite eliminar los archivos adjuntos de medios ya tomados
Tom J Nowell
24

A partir de WordPress 3.5, los parámetros de Meta Query admiten EXISTSy NOT EXISTScomo operadores de comparación. En el caso de que los esté utilizando, puede omitir la valueparte de la metaconsulta. Pruebe los siguientes argumentos para su consulta:

$args = array(
   'post_type'  => 'post',
   'posts_per_page' => 6,
    'meta_query' => array(
        array(
         'key' => '_thumbnail_id',
         'compare' => 'EXISTS'
        ),
    )
);
helgatheviking
fuente
Gracias por la sugerencia. Ahora recibo las 6 publicaciones, pero sigo recibiendo publicaciones sin miniaturas.
harryg
Probé esto y funcionó para mí. Pero sí noté que devolverá entidades que tienen el metaconjunto, pero por alguna razón esa ID de archivo adjunto no es correcta. Por lo tanto, verifique que sus publicaciones tengan configuradas las imágenes destacadas. De lo contrario, no sé qué más podría ser el problema.
helgatheviking
harryg, ¿puedes confirmar que estás usando v3.5 o posterior?
Tom J Nowell
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).
harryg
2
Solo información adicional: hay un error no resuelto, vea el ticket de trac 23268 , que hace necesario usar un valor si NOT EXISTSse usa.
Nicolai