Hoy queremos compartir con vosotros un problema que nos hemos encontrado después de haber actualizado algunas webs bajo WordPress a la versión 4.4.1: La paginación de la home ha dejado de funcionar.
El problema exacto es el siguiente: Si en la home se muestran las últimas entradas y luego hay una paginación para poder ver el resto de entradas, esta paginación no funciona. Siempre lleva a la home. O sea, carga la página 2, pero se redirige a la home.
OJO: Esto no pasa con todos los temas, pero si que está más extendido de lo que pensábamos, por eso compartimos la solución aquí.
Es una locura encontrar la razón de este comportamiento, sobre todo cuando de paso se han actualizado temas y plugins. Comprobando con páginas web que siguen las redirecciones de una web no se puede extraer otra conclusión que la páginas paginadas tienen una redirección 301 a la home (pero no qué las ocasiona).
Pues ya tenemos al culpable: El archivo /wp-includes/canonical.php. Un archivo de WordPress actualizado en la versión 4.4.1 que ocasiona este problema. El seguimiento del problema en WordPress está aquí (en inglés): «Strange pagination issue on front page after 4.4.1 update«.
Esto se va a solucionar en la próxima actualización de WordPress (la 4.4.2), pero si mientras tanto quereis que la paginación funcione, hay que editar las líneas 264-270 del archivo del núcelo de WordPress: /wp-includes/canonical.php.
<?php // Post Paging if ( is_singular() && ! is_front_page() && get_query_var('page') ) { if ( !$redirect_url ) $redirect_url = get_permalink( get_queried_object_id() ); $redirect_url = trailingslashit( $redirect_url ) . user_trailingslashit( get_query_var( 'page' ), 'single_paged' ); $redirect['query'] = remove_query_arg( 'page', $redirect['query'] ); }
y cambiarlas por (también tenéis el código en «Strange pagination issue on front page after 4.4.1 update«):
<?php // Post Paging if ( is_singular() && get_query_var('page') && ( !is_front_page() || ( isset($wp_query->queried_object) && 'page' == get_option('show_on_front') && $wp_query->queried_object->ID == get_option('page_on_front') ) ) ) { if ( !$redirect_url ) $redirect_url = get_permalink( get_queried_object_id() ); $page = get_query_var( 'page' ); if ( is_front_page() ) { $redirect_url = trailingslashit( $redirect_url ) . user_trailingslashit( "$wp_rewrite->pagination_base/$page", 'paged' ); } else { $redirect_url = trailingslashit( $redirect_url ) . user_trailingslashit( $page, 'single_paged' ); } $redirect['query'] = remove_query_arg( 'page', $redirect['query'] ); }
Con esto se soluciona el problema y vuelve a funcionar la paginación.
OJO: Esto es la mejor solución que hay ahora mismo, pero NUNCA se deberían de editar los archivos del núcleo de WordPress, pero si que nos sirve para solucionar temporalmente el problema hasta que tengamos la actualización 4.4.2
P.D.: Si no sabes como modificar el archivo canonical.php mejor no intentes aplicar esta solución por ti mismo.
Créditos imágenes: Shutterstock – JoemanjiArts