Soporte » Guías – Resolución de problemas » Buscador WordPress personalizado

  • Resuelto javiermg

    (@javiermg)


    Buenos días,

    Estoy haciendo un buscador personalizado sin plugin, y solo me busca por post, y no las páginas de mi sitio WordPress. ¿Que tengo que poner en el archivo search.php, para que me busque además de los post(entradas), también las páginas?.

    Un saludo,

    Gracias.

Viendo 15 respuestas - 1 de 15 (de 22 total)
  • Hola,

    Por defecto la query de busqueda que yo recuerde ya incluye las paginas.

    Revisa el codigo que no sea que solo tienes los post.

    Otra seria comprobar la consulta sql para saber realmente donde busca.
    Tiene algo de ayuda aqui: https://codex.wordpress.org/Editing_wp-config.php#Save_queries_for_analysis

    Hola tengo puesto esto en search.php

    <!--llamada a la cabecera; logo, menú...-->
    <?php
    get_header();
    ?>
    <!--contenido principal-->
    <div id="main-content">
    	<div class="container">
    		<div id="content-area" class="clearfix">
    			<div id="left-area">
                              <!--título general-->
                              <h1>Resultados de su B&uacute;squeda:</h1>
    	                  <span class="et_pb_fullwidth_header_subhead"> Encontrar&aacute; m&aacute;s informaci&oacute;n en:
    	                  <!--las categorías del blog-->
                              <?php $categories = get_categories();
    		               foreach ( $categories as $category ) { 
    		                 if (!each($categories)){?>
    			             <a>name)))?>"> <?php echo esc_html( $category->name )?> </a>
    		                 <?php } 
                                     else {?>
                                         <a>name)))?>"> <?php echo esc_html( $category->name )?> >></a>
    		                 <?php } 
                                 } ?>
    	                </span>
                            <!--buscador-->
                            <div class="buscador center"><?php echo get_search_form(); ?></div>
                            <!--si hay post, entra en el bucle-->
                            <?php if ( have_posts() ) : ?>
                            <!--el loop-->
    			<?php while ( have_posts() ) : the_post(); ?>
                                   <!-- recopilando info de cada post -->
    				<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                                            <!-- título del post -->
    					<h1 class="entry-title main_title"><?php the_title(); ?></h1>
    					<!-- contenido del post -->
                                            <div class="entry-content">
    					<?php
                                                 the_excerpt(); 
                                            ?>
                                            <a>">Leer más...</a>
    					</div> <!-- fin contenido post -->
    				</article> <!-- fin info de cada post -->
    			<?php endwhile; ?><!-- fin del loop -->
                            <!-- si no hay post de búsqueda -->
                            <?php else: ?>
                            <p>No hemos encontrado resultados para su b&uacute;squeda. Encontrar&aacute; un &iacute;ndice con todas las entradas de este blog en:</p>
                             <div id="enlace-todas-las-entradas">
                              <h1> <a href="">>> Ver todas las entradas</a></h1>
                             </div> 
                            <?php endif;?>
    
    			</div> <!-- termina contenido derecha -->
    
    			<?php get_sidebar(); ?><!-- barra lateral -->
    		</div> <!-- fin de div contentarea -->
    	</div> <!-- fin de div container -->
    </div> <!-- fin de div contenido principal -->
    
    <?php get_footer(); ?><!-- llamada al pie de página -->
    • Esta respuesta fue modificada hace 2 meses, 1 semana por  javiermg.

    Buenas javier,

    Intenta usa la equiteta code en un futuro cuando pongas codigo.

    Sobre lo que puedo distinguir, eso no es un buscador personalizado, es una plantilla personalizada para los resultados de la busqueda.

    Lamentablemente con los datos que tengo ahora no puedo ayudarte mucho mas.
    Puede ser que un plugin modifique algo, el theme que usas o algun codigo que podrias tener.
    Ya que estoy seguro de que se muestran las paginas, lo acabo de probar.

    Cuando se personaliza el buscador por ejemplo para añadir categorias, etc… en la busqueda se usa uno de esos filtros que puse o otras tecnicas como el query_posts

    Ya he puse la etiqueta code sorry. Lo que hice es modificar el buscador que trae por defecto WordPress y su search.php. ¿No hay un método dentro de mi código para además de buscar los post, también las páginas (Page)?.

    Un saludo.

    Veamos, entiendo que modificastes el searchform.php y el search.php.
    Si es correcto y pusistes un input en el searchform.php dentro de form como esto: <input type="text" value="" name="s" />
    Es importante que exista ya que del name ‘s’ extrae el string que buscar.

    Y volviendo a lo comentado, la consulta a la base de datos tambien busca en las paginas.

    Tienes la web online para que pueda verla?

    Claro hice el searchform.php donde tiene el input para hacer la búsqueda. En el código del search.php, en el while busca los post, ¿no habría dentro de ese bucle alguna manera que buscase las Page?.

    En el función.php vi por Internet que se puede controlar buscando solo por post o por página, pero yo quiero que busque las dos cosas.

    Pienso que tiene que ser un detalle tonto, desde mi desconocimiento claro. La web la tengo en localhost. 🙁

    Moderador almendron

    (@almendron)

    El buscador de WordPress busca por defecto en las entradas y en las páginas.

    Si solo quieres eso, deshaz los cambios y deja el buscador tal cual.

    Moderador almendron

    (@almendron)

    Puedes probar, si quieres, con este plugin: https://es.wordpress.org/plugins/relevanssi/

    No me lo hacía antes tampoco, solo buscaba las entradas, ya que el tema que estamos usando lo hemos creado desde 0, de otra plantilla se puede sacar el search.php?

    No queremos utilizar plugin, solo queríamos modificar el buscador para ponerlo a nuestro gusto, pero solo busca los post.

    Moderador almendron

    (@almendron)

    Una duda: ¿por qué usas <?php echo get_search_form(); ? en lugar de <?php get_search_form(); ?>

    Radica ahí el error?

    Buenas, a mi me pasó también una vez.

    Yo creía que WordPress buscaba tanto en páginas como posts (y puede que así sea).

    De todas formas, prueba con este código en tu functions.php y dinos si te funciona:

    function wpshock_search_filter( $query ) {
        if ( $query->is_search ) {
            $query->set( 'post_type', array('post','page') );
        }
        return $query;
    }
    add_filter('pre_get_posts','wpshock_search_filter');

    Saludos

    Ya me busca las páginas muchas gracias, tenía una línea que no estaba bien implementada en el search.php.

    Una última duda

    Para dividir los resultados de búsqueda en post y entradas,¿como deberia ponerlo?, es decir que cuando busque por ejemplo: Mercado, salga estas son las entradas y estas son las páginas que hacen referencia a esa búsqueda.

    Un saludo,
    Gracias.

    Añado que al codigo de Jose yo lo cambiaria por ‘any’ para incluir tambien los custom post type, si los tivuieses.

    Me alegro Javier,

    Sobre lo que comentas si solo quieres poner un label indicando el tipo puedes usar la funcion get_post_type si lo que quieres es hacerlo por secciones se complica un poco mas ya que los resultados no vienen ordenados por el post type.

    Puedes por ejemplo capturar los post y luego fuera del loop hacer otro o modificas el orderby añadiendo post_type y por ejemplo cuando cambie el tipo añades html o aunque no lo recomiendo limitas la main query a por ejemplo post usanso el codigo de Jose luego en el search.php despues del loop hacer otra query y otro loop pero esta vez especificas el post_type en page, aqui tienes que tener cuidado ya que deberas desactivar el filtro o dentro del filtro añadir alguna comprobacion para que no cambie el post type.

Viendo 15 respuestas - 1 de 15 (de 22 total)
  • Debes estar registrado para responder a este tema.