get_query_var('paged') siempre devuelve vacío

18 dic 2012, 14:21:56
Vistas: 13.6K
Votos: 7

Publico esto después de haber golpeado un muro buscando posibles soluciones.

Tengo un sitio con varios tipos de contenido personalizados y taxonomías personalizadas asociadas. Para facilitar las cosas, estoy usando una plantilla unificada taxonomy.php.

Dentro de esa plantilla hay tres bucles. Me gustaría que los tres se ejecuten en la primera página, y después de eso, solo el tercer bucle. Entiendo cómo hacer que funcione con is_paged() pero hay un problema mayor que no puedo resolver.

En mis $args incluí $paged de:

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;     

Pero $paged siempre devuelve 1, sin importar en qué página esté. Si hago directamente:

    get_query_var('paged')

Entonces no se devuelve nada, sin importar si estoy en la primera, segunda, tercera página, etc.

He leído que necesitas reiniciar cada bucle para que esto funcione, y esa es una práctica que siempre he seguido.

No incluiré toda la página aquí, ya que es una taxonomía bastante larga y compleja. En cambio, mostraré la configuración base de los dos bucles.

NOTA: No puedo usar pre_get_posts para esta página ya que afecta a todos los bucles. Cada uno de estos bucles tiene requisitos separados de posts_per_page y otros aspectos que deben mantenerse separados.

En la parte superior de la plantilla tengo:

    //esto evita duplicación
        $do_not_duplicate = array();

        global $wp_query;
        $term = $wp_query->queried_object;

Y configuro mi bucle después de mis args con:

while ($new_query->have_posts()) : $new_query->the_post();

El tercer bucle que quiero paginado tiene este código cercano:

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;                                 
                $args=array(
                    'posts_per_page' => $total_posts,
                    'post__not_in' => array_merge($do_not_duplicate, $unwanted_post_ids ),
                    'paged' => $paged,
                    'tax_query' => array(
                            array(
                                'taxonomy'  => $term->taxonomy,
                                'field'     => 'slug',
                                'terms'     => $term->slug,
                                )
                            )
                    );

                // Volver a ejecutar la consulta con los nuevos argumentos
                query_posts( $args );

He estado usando wp_query en lugar de query_posts, pero para mis últimos intentos eso es lo que he tenido allí. Preferiría cambiarlo de vuelta.

¿Alguna idea?

3
Comentarios

¿Puedes publicar tu código completo? Es un poco difícil de seguir en fragmentos descriptivos, verlo completo lo haría mucho más comprensible

Tom J Nowell Tom J Nowell
18 dic 2012 14:43:08

también ten en cuenta que query_posts usará WP_Query en su nivel más bajo de todos modos, así que no tiene sentido usarlo como una herramienta de consulta general

Tom J Nowell Tom J Nowell
18 dic 2012 14:43:50

Prueba usando esto: $paged = (get_query_var('page')) ? get_query_var('page') : 1; No estoy seguro del motivo, pero esto me funcionó una vez.

Rohit Pande Rohit Pande
15 jun 2013 09:28:10
Todas las respuestas a la pregunta 5
1

Intenta utilizar lo siguiente:

$paged = (get_query_var('page')) ? get_query_var('page') : 1;

En lugar de usar:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

Tuve el mismo problema y funciona para mí.

25 feb 2022 20:52:05
Comentarios

'page' se usa solo para una página frontal estática. De lo contrario, se necesita 'paged'.

JohnG JohnG
1 ago 2022 14:15:23
0

¿Tienes el parámetro "paged" en la URL de la(s) página(s) que estás intentando usar con get_query_var? Por lo que sé, get_query_var("paged") devuelve explícitamente el valor del parámetro de la URL, por lo que necesitas tener una URL como esta para que funcione:

/?paged=7

Alternativamente, podrías leer el parámetro de la URL usando PHP directamente:

$_GET['paged']
18 dic 2012 15:52:18
0

Deberías poder obtener esto directamente de la variable principal $wp_query, podrías hacer un print_r() y verificar los diferentes argumentos que necesitarías, como paged, posts_per_page, etc. ¿Qué información puedes ver en tu plantilla al hacer esto?

23 ago 2013 18:27:56
0

Tuve el mismo problema, específicamente al paginar usando AJAX. get_query_var('paged') devolvía una cadena vacía, por lo que $paged siempre se establecía en "1", y - aunque las páginas cambiaban - los enlaces de paginación siempre mostraban "1" como la página actual.

Para resolver mi problema, simplemente obtuve el valor de página pasado a mi archivo de funciones ($_POST['page']) mediante AJAX, lo llamé $pagination_no, y luego cambié la fórmula de $paged a:

$paged = ($pagination_no) ? $pagnination_no : 1;

Eso solucionó el problema.

1 ago 2022 16:03:00
0

Usa page, no paged, en la página de inicio estática

✅ La solución:

$paged = (get_query_var('page')) ? get_query_var('page') : 1;

⭐️ Una sintaxis mejor (ver fuente):

$paged = get_query_var('page', 1);

Dentro del loop puedes usar directamente el valor global $page (ver documentación):

global $page;

Si estás en una página de inicio estática debes usar la variable de consulta page en lugar de paged (ver documentación).

La variable global $page siempre retorna un entero.

Un enfoque mejor:

$paged = 1;
if ( get_query_var('paged') ) $paged = get_query_var('paged');
if ( get_query_var('page') ) $paged = get_query_var('page');

Esto funcionará correctamente sin importar dónde uses el código.

Aquí una referencia antigua que intenta resolver el problema.

6 oct 2022 11:22:11