¿Cuál es la diferencia entre $paged y $page?

11 mar 2015, 04:50:29
Vistas: 16.4K
Votos: 9

Estoy creando paginación para mi sitio. Espero que alguien pueda explicarme para qué sirve el siguiente código. Gracias de antemano.

<?php
// Verificar si existe la variable 'paged' en la consulta
if ( get_query_var('paged') ) {
    $paged = get_query_var('paged');
// Si no existe, verificar la variable 'page'
} elseif ( get_query_var('page') ) {
    $paged = get_query_var('page');
// Si no existen ninguna, establecer página 1 por defecto
} else {
    $paged = 1;
}
// Ejecutar consulta con la paginación y cantidad de posts por página
query_posts('paged='.$paged.'&posts_per_page=');
?>
0
Todas las respuestas a la pregunta 1
4
12

Espero que entiendas qué son las variables de consulta. Si no, aquí tienes una breve explicación. La consulta principal usa WP_Query para configurarse. En la consulta principal, WP_Query utiliza variables de consulta públicas para construir la consulta principal según la página solicitada, y paged y page son dos de ellas. Para ver todas las variables de consulta públicas, pega esto en tu cabecera y revisa en todas las plantillas cómo se configuran según la página consultada:

var_dump($wp_query->query_vars);

La función get_query_var() se utiliza para obtener los valores de esas variables de consulta públicas, y en este caso, son page y paged.

Para responder a tu pregunta, estos dos parámetros y sus valores son utilizados por WP_Query para calcular la paginación y, más importante aún, el desplazamiento de las publicaciones según los números de página. Es este parámetro el que asegura que tus publicaciones se paginen correctamente al navegar por las páginas.

  • paged -> Se utiliza en la página de inicio, página de blog, páginas de archivo y páginas para calcular la paginación. La primera página es 0 y a partir de ahí, el número corresponde al número de página.

  • page -> Se utiliza en una página frontal estática y en páginas individuales para la paginación. La paginación en estas páginas funciona igual; una página frontal estática se trata como una página individual en la paginación. Por paginación en páginas individuales, me refiero a que las publicaciones individuales pueden dividirse en múltiples páginas.

Lo que básicamente hace tu código es verificar si el parámetro paged está configurado; si falla, verifica si el parámetro page está configurado, y si no está configurado, establece la página en 1. Esta verificación siempre fallará en la página 1, por lo que $paged siempre volverá a 1. En cualquier otra página que no sea la primera, ya sea paged o page devolverá verdadero y establecerá $paged en el número de página correcto.

Nota final: Nunca, bajo ninguna circunstancia, uses query_posts a menos que necesites romper algo en tu página, y créeme, no quieres eso. Siempre usa WP_Query para consultas personalizadas paginadas. Para una explicación completa sobre esto, por favor revisa esta publicación que hice hace un tiempo.

11 mar 2015 06:38:17
Comentarios

Gracias @pieter-goosen. Es una explicación muy clara. ¿Se usa paged para obtener la página actual que se está viendo?

Hung PD Hung PD
12 mar 2015 04:04:31

Sí, puedes usar echo get_query_var( 'paged' ); para obtener el número de página actual que estás viendo

Pieter Goosen Pieter Goosen
12 mar 2015 05:27:57

¡Excelente explicación! El parámetro page tiene en cuenta la palabra clave <!--nextpage-->, que divide una única publicación en múltiples páginas: https://en.support.wordpress.com/nextpage/view-all/

Philipp Philipp
13 ago 2019 12:18:48

Ten en cuenta que una página de inicio puede configurarse como una página frontal estática y luego se usa page en lugar de paged.

@PieterGoosen No estoy de acuerdo con tu nota final. Si devuelves publicaciones mediante un shortcode, se podría usar query_posts. Independientemente de si lo haces o no, debes llamar a wp_reset_query después de obtener los datos, de lo contrario tendrás problemas. De hecho, yo hago esto y no he tenido ningún problema.

Alexander Behling Alexander Behling
28 jun 2021 13:07:27