Esto es lo que probé y obtuve una solución con 3 pasos. Digamos que su tipo de publicación personalizada es " productos "
1) Agregar código de función aquí puede especificar el archivo-search.php
function template_chooser($template)
{
global $wp_query;
$post_type = get_query_var('post_type');
if( $wp_query->is_search && $post_type == 'products' )
{
return locate_template('archive-search.php'); // redirect to archive-search.php
}
return $template;
}
add_filter('template_include', 'template_chooser');
2) Cree una plantilla de resultados de búsqueda para el tipo de publicación personalizada (archive-search.php)
<?php
/* Template Name: Custom Search */
get_header(); ?>
<div class="contentarea">
<div id="content" class="content_right">
<h3>Search Result for : <?php echo "$s"; ?> </h3>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div id="post-<?php the_ID(); ?>" class="posts">
<article>
<h4><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h4>
<p><?php the_exerpt(); ?></p>
<p align="right"><a href="<?php the_permalink(); ?>">Read More</a></p>
<span class="post-meta"> Post By <?php the_author(); ?>
| Date : <?php echo date('j F Y'); ?></span>
</article><!-- #post -->
</div>
<?php endwhile; ?>
<?php endif; ?>
</div><!-- content -->
</div><!-- contentarea -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Crear formulario de búsqueda
En este formulario de búsqueda, el valor "productos" está oculto y solo buscará publicaciones de productos .
<div>
<h3>Search Products</h3>
<form role="search" action="<?php echo site_url('/'); ?>" method="get" id="searchform">
<input type="text" name="s" placeholder="Search Products"/>
<input type="hidden" name="post_type" value="products" /> <!-- // hidden 'products' value -->
<input type="submit" alt="Search" value="Search" />
</form>
</div>
para más información, me gustaría vincularlo aquí
http://www.wpbeginner.com/wp-tutorials/how-to-create-advanced-search-form-in-wordpress-for-custom-post-types/
get_query_var('post_type')
devolvió una matriz (en lugar de una cadena), por lo que no se pudo comparar directamente. Como solo estoy buscando un tipo de publicación a la vez, simplemente cambié mi$post_type
var a$post_type[0]
.http://localhost:3000/?s=cloud%27&post_type=product
ahttp://localhost:3000/search/cloud/product
search_template
filtro parece ser una alternativa más apropiada paratemplate_include
Esto es lo que funciona para mí. No tan limpio, pero no pude obtener ninguna de estas otras respuestas para trabajar.
Formulario de búsqueda para el tipo de publicación personalizada:
En functions.php:
En search.php:
Naturalmente, en los tres lugares deberá reemplazar "libro" con su tipo de publicación personalizada.
¡Espero que esto ayude a alguien!
fuente
Un código corto más actualizado
fuente
Estaba buscando usar dos formas diferentes para mis búsquedas normales y mis búsquedas en un tipo de publicación personalizada.
Mi tipo de publicación personalizada utiliza un encabezado diferente al de las páginas normales, en mi página normal, la llamada a mi formulario de búsqueda es:
Y la llamada a mi formulario de búsqueda en el encabezado de tipo de publicación personalizada es:
Que tiene un campo adicional:
En el archivo de funciones tengo el siguiente código que ha proporcionado.
Que detecta si el formulario de búsqueda está haciendo una búsqueda dentro de los campos personalizados, mostrando así la búsqueda en una plantilla personalizada, de lo contrario, use la plantilla normal.
Editar: se corrigió la llamada a la función get_search_form () que habría devuelto verdadero sin importar qué.
fuente
get_search_form('true')
debería serget_search_form(true)
.get_search_form
está buscando una entrada booleana, así quetrue
ofalse
. Al envolverlo entre comillas, lo está alimentando con una cadena, no con un parámetro booleano. La forma en que se configura esa función, ambas'true'
y'false'
devolverían el mismo resultado, porque ambas son cadenas no vacías (lo que hace que la función devuelva verdadero en ambos casos).Para solucionar el problema de búsqueda de entrada vacía, puede sustituir el código de función con esto:
fuente