Programación

Foro WordPress » WordPress » Programación

La paginación no funciona en los resultados de búsqueda (8 mensajes)

Acerca de este hilo

Tags

  1. pfd

    4.0
    Antiguedad: Nov 2009
    Mensajes: 82

    offline

    Publicado hace 1 año
    #

    No se lo que he tocado pero ahora la paginación de los resultados de búsqueda no funciona.

    Si hago una búsqueda usando dos o más términos, los resultados son correctos y me da una url del tipo .../?s=present+perfect, sinembargo, cuando paso a la pagina siguiente de los resultados de búsqueda me altera la url y me da una url tipo .../page/2/?s=presentperfect, con lo que al eliminar el signo "+" ya no salen los resultados esperados.

    Dejo el código por si alguien me puede indicar donde está el error:

    < ?php
    global $wp_rewrite;
    $wp_query- >query_vars['paged'] > 1 ? $current = $wp_query- >query_vars['paged'] : $current = 1;

    $pagination = array(
        'base' = > @add_query_arg('page','%#%'),
        'format' = > '',
        'total' = > $wp_query- >max_num_pages,
        'current' = > $current,
        'show_all' = > false,
        'type' = > 'plain',
        );

    if( $wp_rewrite- >using_permalinks() )
        $pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg('s',get_pagenum_link(1) ) ) . 'page/%#%/', 'paged');

    if( !empty($wp_query- >query_vars['s']) )
        $pagination['add_args'] = array('s'= >get_query_var('s'));

    echo paginate_links($pagination);
    ? >
    < /div >

  2. pfd

    4.0
    Antiguedad: Nov 2009
    Mensajes: 82

    offline

    Publicado hace 1 año
    #

    Vaya, creo que no es un problema de paginación, sino directamente de la caja de búsqueda:

    < form  method="get" class="searchform" action="http://www.ejerciciodeingles.com/" >
        < p >< label for="s" >< /label >
        < input type="text" value="< ?php echo wp_specialchars($s, 1); ? >" name="s" id="s" / >
        < input type="submit" id="searchsubmit" value="Buscar" / >
        < /p >
    < /form >

    ¿pero que falta?

  3. LGrusin

    Moderador
    Antiguedad: Feb 2011
    Mensajes: 1.801

    offline

    Publicado hace 1 año
    #

    En value usa <?php the_search_query(); ?>, es decir:

    < input type="text" value="< ?php the_search_query(); ? >" name="s" id="s" / >

    De esta forma conserva la cadena tal como se introduce en el cuadro de búsqueda.
    wp_specialchars puede que modifique la cadena a buscar. De todas formas esta función es obsoleta.

    Un saludo

  4. pfd

    4.0
    Antiguedad: Nov 2009
    Mensajes: 82

    offline

    Publicado hace 1 año
    #

    Hola LGrusin,

    He hecho lo que comentas pero el problema persiste:

    < form method="get" class="searchform" action="http://localhost/blogtest/" >
        < p >< label for="s" >< /label >
        < input type="text" value="< ?php the_search_query(); ? >" name="s" id="s" / >
        < input type="submit" id="searchsubmit" value="Buscar" / >
        < /p >
    < /form >

    También he intentado con una solución propuesta en WPRecipies que en principio es completamente diferente y obtengo los mismos resultados. ¿Qué puede estar pasando?

  5. LGrusin

    Moderador
    Antiguedad: Feb 2011
    Mensajes: 1.801

    offline

    Publicado hace 1 año
    #

    Por lo que he podido averiguar la función paginate_links (se encuentra en el archivo \wp-includes\general-template.php) es la culpable, usa alguna función que limpia la URL y elimina los espacios entre palabras.

    Si estas haciendo pruebas en local ponle un echo a get_query_var y verás que muestra las palabras tal como las tecleas en el cuadro de búsqueda con los espacios.

    <?php echo get_query_var( 's' ); ?>

    O sea, que estamos en las mismas. Por lo que se ve esta función no ha sido pensada para trabajar con dos o más palabras.

    Solución:
    1 - No usar más de una palabra en la búsqueda.
    2 - Hacer alguna chapuza para sustituir los espacios por el signo +

    if ( !empty($wp_query- >query_vars['s']) ) {
      $mi_var = str_replace(' ', '+', get_query_var( 's' ));
      $pagination['add_args'] = array( 's' = > $mi_var);
    }

    Seguiré investigando.

    Un saludo

  6. pfd

    4.0
    Antiguedad: Nov 2009
    Mensajes: 82

    offline

    Publicado hace 1 año
    #

    He intentado incorporar el código que propones, pero me elimina la barra lateral y el footer. Creo que la responsable es la última función

    $mi_var

    puesto que al ponerlo por partes el resto no generaba problemas.

    En cualquier caso, gracias por tu ayuda (una vez más)

  7. fliberty

    5.0
    Antiguedad: Oct 2009
    Mensajes: 1.511

    offline

    Publicado hace 1 año
    #

    Este problema no sólo ocurre con el formulario de búsquedas de wordpress, en mi caso, tengo el mismo problema con el formulario de búsquedas personalizadas de google, ya que al utilizar más de un término de búsquedas, las busca todo junto, generando de esta manera un error en la frase buscada, lo que no ocurre cuando se utiliza sólo un término de búsqueda.

    Visítenme:
    http://www.contigoperu.com.pe (hosting/dominios) | http://www.pachakamaq.com (temática variada) | http://www.mipycs.com (image hosting gratuito) | http://www.contigoperusemanario.org(noticias) | http://www.contigoperuclasificados.com (clasificados gratis) | http://www.cyberdocentes.com (recursos educativos)
  8. LGrusin

    Moderador
    Antiguedad: Feb 2011
    Mensajes: 1.801

    offline

    Publicado hace 1 año
    #

    Esto no afecta para nada al footer ni al sidebar. Sólo he modificado tu código donde pone:

    if( !empty($wp_query- >query_vars['s']) )
        $pagination['add_args'] = array('s'= >get_query_var('s'));

    por este otro:

    if ( !empty($wp_query- >query_vars['s']) ) {
      $mi_var = str_replace(' ', '+', get_query_var( 's' ));
      $pagination['add_args'] = array( 's' = > $mi_var);
    }

    Tu código completo modificado sería:

    < ?php
    global $wp_rewrite;
    $wp_query- >query_vars['paged'] > 1 ? $current = $wp_query- >query_vars['paged'] : $current = 1;

    $pagination = array(
        'base' = > @add_query_arg('page','%#%'),
        'format' = > '',
        'total' = > $wp_query- >max_num_pages,
        'current' = > $current,
        'show_all' = > false,
        'type' = > 'plain',
        );

    if( $wp_rewrite- >using_permalinks() )
        $pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg('s',get_pagenum_link(1) ) ) . 'page/%#%/', 'paged');

    if ( !empty($wp_query- >query_vars['s']) ) {
      $mi_var = str_replace(' ', '+', get_query_var( 's' ));
      $pagination['add_args'] = array( 's' = > $mi_var);
    }
    echo paginate_links($pagination);
    ? >

    Por supuesto usando < ?php the_search_query(); ? > en el formulario de búsqueda como dije antes.

    Un saludo

Responder

Debes Identificarte para publicar.

Foro WordPress » WordPress » Programación