WP_Query mostrando TODAS las entradas

2 oct 2014, 10:56:48
Vistas: 30.7K
Votos: 4

No puedo entender por qué mi WP_Query siempre muestra todas mis entradas publicadas independientemente de los argumentos que coloque.

<?php 

    $args = array('numberposts' => 1,
                    'meta_key' => 'display',
                    'meta_value' => 'about'
    );

    $about_preview_query = new WP_Query($args);

    if ($about_preview_query->have_posts()) {
        print "<h1>ENTRADAS ENCONTRADAS</h1>";
    }

    while ($about_preview_query->have_posts()) {
        $about_preview_query->the_post();
        print "<h1>";
        the_title();

        print "</h1>";

    }
?>

¿Estoy haciendo algo mal aquí? Después de leer la documentación sobre WP_Query() no puedo descubrir dónde me estoy equivocando, agradezco cualquier ayuda que pueda obtener.

Actualización

He probado este código y sigo obteniendo la misma respuesta. Todas las entradas se están devolviendo en el bucle.

    $args = array(
        'posts_per_page' => 1,
        'meta_query' => array(
            array(
                'key' => 'display',
                'value' => 'about',
                'compare' => '=',
             )
        ),
    );

Actualización 2

Parece que si imprimo $about_preview_query->found_posts la salida es 1. Así que sospecho que hay algo mal en cómo estoy haciendo el bucle de las entradas:

<?php if ($about_preview_query->have_posts()): ?>

    <h1>Tiene <?php print $about_preview_query->found_posts ?> Entradas</h1>

    <?php while ($about_preview_query->have_posts()): $about_preview_query->the_post(); ?>
        <h2><?php the_title(); ?></h2>
    <?php endwhile; ?>

<?php endif; ?>
6
Comentarios

¿Has intentado reiniciar tus postdata?

Pieter Goosen Pieter Goosen
3 oct 2014 10:43:05

Hola, gracias por tu respuesta. Literalmente acabo de probar poniendo wp_reset_postdata(); arriba de mi consulta un segundo antes de tu comentario. Aún así tengo el mismo problema donde muestra todos los posts.

Mark Winterbottom Mark Winterbottom
3 oct 2014 10:46:51

Debajo de tu consulta, haz un var_dump dentro de una etiqueta pre para ver qué devuelve tu consulta. Ejemplo ?><pre><?php var_dump($about_preview_query); ?></pre><?php

Pieter Goosen Pieter Goosen
3 oct 2014 10:51:12

Extraño, aunque el conteo de found_posts es 1, el var dump sugiere que la consulta está devolviendo todas las publicaciones :S.

Mark Winterbottom Mark Winterbottom
3 oct 2014 10:57:36

Entonces hay publicaciones inyectadas desde algún otro lugar. En algún sitio estás ejecutando consultas personalizadas que no se han reiniciado. Podría ser incluso desde una instancia de pre_get_posts

Pieter Goosen Pieter Goosen
3 oct 2014 11:06:18

He estado pensando, solo como verificación, elimina tu meta_query y deja solo el parámetro posts_per_page y prueba para ver si devuelve el mismo comportamiento. También verifica si hay filtros personalizados o funciones que puedan estar inyectando publicaciones en el arreglo devuelto con tu publicación

Pieter Goosen Pieter Goosen
3 oct 2014 11:48:17
Mostrar los 1 comentarios restantes
Todas las respuestas a la pregunta 3
0

Es porque estás proporcionando argumentos incorrectos. Proporciona los argumentos correctos a WP_Query().

También echa un vistazo a los parámetros de campos personalizados

Una cosa más, tendrás que usar código como:

$args = array(
    'posts_per_page' => 5,
    'meta_query' => array(
        array(
            'key'     => 'display',
            'value'   => 'about',
            'compare' => '=', // (Lee todos los operadores de comparación en el enlace proporcionado)
        ),
    ),
);
2 oct 2014 11:25:18
0

No existe el parámetro numberposts. Usa posts_per_page en su lugar. Entonces tu código quedará así...

<?php 

    $args = array(
        'posts_per_page' => 1,
        'meta_key' => 'display',
        'meta_value' => 'about'
    );

    $about_preview_query = new WP_Query($args);

    if ( $about_preview_query->have_posts() ) {
        print "<h1>PUBLICACIONES ENCONTRADAS</h1>";
    }

    while ( $about_preview_query->have_posts() ) {
        $about_preview_query->the_post();
        print "<h1>";
        the_title();
        print "</h1>";
    }
?>
2 oct 2014 11:11:33
1

Todo lo que necesitas hacer es cambiar

'posts_per_page' => 1,

por

'posts_per_page' => -1,
26 jun 2017 15:53:27
Comentarios

-1 devolvería todas las publicaciones.

Picard Picard
26 jun 2017 17:09:01