Solucionar problema de paginación de la home con WordPress 4.4.1

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

error-de-paginacion-wordpress-4-4-1

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Los comentarios de esta página se procesan por un sistema automático de moderación por lo cual no siempre se publican de forma instantánea. Por favor respeta a los demás y ciñete al tema del post. Nos reservamos el derecho de eliminar cualquier comentario o enlace que nos parezca inadecuado o tenga una expresión de grosería, insulto, odio, hostilidad o negatividad.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.