Consultar entradas solo con imagen destacada

3 mar 2013, 20:52:27
Vistas: 33.7K
Votos: 17

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

5
Comentarios

El fragmento de código funcionó como esperaba para mí. Quizás el error está en otra parte del código.

Ralf912 Ralf912
3 mar 2013 21:40:51

¿Qué obtienes de var_dump( $query )?

Chip Bennett Chip Bennett
3 mar 2013 22:07:45

Como algo adicional que se me ocurrió: los posts fueron importados a mi servidor local desde un sitio en vivo usando el exportador/importador de WordPress. Los posts originales tenían imágenes destacadas que obviamente se perdieron en el proceso de importación. ¿Podría significar eso que aunque las imágenes destacadas fueron eliminadas, las meta keys aún permanecían causando que la consulta se descompusiera?

harryg harryg
4 mar 2013 01:39:38

Cuando ejecutaste la importación, ¿marcaste la casilla para descargar y adjuntar todos los archivos/medios? Si no lo hiciste, entonces tus imágenes destacadas no funcionarán. Las publicaciones tendrán una imagen destacada, pero hará referencia a un archivo adjunto que no existe, por lo que nunca se mostrará.

Tom J Nowell Tom J Nowell
4 mar 2013 02:27:53

Sí, marqué la casilla al importar.

harryg harryg
4 mar 2013 11:16:17
Todas las respuestas a la pregunta 2
5
31

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'
        ),
    )
);
3 mar 2013 21:59:12
Comentarios

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

harryg harryg
4 mar 2013 01:36:28

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.

helgatheviking helgatheviking
4 mar 2013 02:01:26

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

Tom J Nowell Tom J Nowell
4 mar 2013 02:25:50

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 harryg
4 mar 2013 11:15:22

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

Nicolai Grossherr Nicolai Grossherr
1 mar 2014 00:28:17
8

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

4 mar 2013 02:29:59
Comentarios

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.

helgatheviking helgatheviking
4 mar 2013 06:48:01

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.

harryg harryg
4 mar 2013 11:14:14

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).

Tom J Nowell Tom J Nowell
4 mar 2013 11:52:50

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

Tom J Nowell Tom J Nowell
4 mar 2013 11:53:56

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 J Nowell Tom J Nowell
4 mar 2013 12:00:50

@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é

harryg harryg
4 mar 2013 12:46:09

¿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.

Tom J Nowell Tom J Nowell
4 mar 2013 13:08:49

¡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.

harryg harryg
4 mar 2013 23:35:17
Mostrar los 3 comentarios restantes