Resolver la paginación de los resultados de búsqueda de WordPress

Uno de los problemas con los que me encuentro al modificar mi sitio web en WordpPress es que normalmente no visito todas las páginas que modifico, con lo que de vez en cuando me encuentro alguna sorpresa, normalmente algo que no funciona como espero, o bien, que no se ve como yo esperaba. En este caso el problema me lo he encontrado en la paginación de los resultados de una búsqueda, así que, como resolver la paginación de los resultados de búsqueda de WordPress.

Soy consciente de que el porcentaje de usuarios que visita la pagina 2 es muy bajo, y no digamos cuando visite las siguientes páginas, pero en mi caso, cuando visito un lugar y busco algo (incluyendo el buscador de Google) visito la segunda, la tercera,…, incluso llego a la décima y mas, así que me gusta que esto esté disponible para todos los usuarios a pesar de que estadísticamente es muy complicado.

Así en los últimos días me he dado cuenta que la paginación no funciona en la página de resultados de WordPress de mi sitio, ¿Como resolver la paginación de los resultados de búsqueda de WordPress?

Resolver la paginación de los resultados de búsqueda de WordPress

Como resolver la paginación de los resultados de búsqueda de WordPress

La página de resultados de búsqueda de WordPress no tiene paginación por defecto, pero como he comentado en la introducción, en mi caso, me gusta que el usuario pueda tener la posibilidad de llegar hasta el final de una búsqueda, aunque estadísticamente esto sea muy poco probable.

Función de paginación

La función de paginación que utilizo para mi sitio WordPress es la siguiente,

/**
 * My own pagination
 */ 
function my_own_pagination($currentpage = '', $pages = '', $range = 2){  
     $showitems = ($range * 2)+1;  
     global $paged;
     if($currentpage != ''){
         $paged = $currentpage;
     }
     if(empty($paged)) $paged = 1;
     if($pages == ''){
         global $wp_query;
         $pages = $wp_query->max_num_pages;
         if(!$pages){
             $pages = 1;
         }
     }   
     if(1 != $pages){        
         echo "<nav class='navigation paging-navigation' role='navigation'>\n";
         echo "<h1 class='screen-reader-text'>Navegar en las entradas</h1>\n";
         echo "<div class='pagination'>";
         if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."' title='Página 1'>&laquo;</a>";
         if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."' title='Página ".($paged - 1)."'>&lsaquo;</a>";
         for ($i=1; $i <= $pages; $i++){
             if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )){
                 echo ($paged == $i)? "<span class='current'>Página ".$i." de ".$pages."</span>":"<a href='".get_pagenum_link($i)."' title='Página ".($i)."' class='inactive' >".$i."</a>";
             }
         }
         if ($paged < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($paged + 1)."' title='Página ".($paged + 1)."'>&rsaquo;</a>";  
         if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($pages)."' title='Página ".($pages)."'>&raquo;</a>";
         echo "</div>\n";
         echo "</nav>\n";
     }
}

Aunque en general esto debe funcionar con cualquier función de paginación incluida la propia de WordPress.

Solución para la paginación.

El problema que me he encontrado es que los enlaces siempre me dirigen a la primera página de resultados de la página de resultados. Así, la solución para resolver la paginación de los resultados de búsqueda de WordPress es tan sencilla como añadir cinco líneas justo antes de,

<?php while ( have_posts() ) : the_post(); ?>

Esas cinco líneas son las siguientes,

global $query_string;
parse_str( $query_string, $my_query_array );
$paged = ( isset( $my_query_array['paged'] ) && !empty( $my_query_array['paged'] ) ) ? $my_query_array['paged'] : 1;
$searched_string = ( isset( $my_query_array['s'] ) && !empty( $my_query_array['s'] ) ) ? $my_query_array['s'] : '';
query_posts('post_type=post&posts_per_page=5&paged='.$paged.'&s='.$searched_string);

1 comentario en “Resolver la paginación de los resultados de búsqueda de WordPress

  1. ES
    Esteban hace 7 años

    El primero que entiendo y además pones el código completo.
    Mil gracias. Me estaba rayando.
    Mil gracias otra vez

Deja una respuesta

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