¿Cuál es la diferencia entre $paged y $page?
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=');
?>

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

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

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

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

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.
