Usar la función de búsqueda estándar con tipo de entrada personalizada
Estoy usando el siguiente código HTML para generar una función de búsqueda en un sitio WordPress:
<form method="get" action="<?php bloginfo('url'); ?>">
<fieldset>
<input type="text" name="s" value="" placeholder="buscar…" maxlength="50" required="required" />
<button type="submit">Buscar</button>
</fieldset>
</form>
Funciona bien, pero deseo que solo devuelva resultados de un tipo de entrada personalizada específico. Estoy usando la plantilla search.php del tema twentysixteen que contiene esto:
<?php global $wp_query; ?>
<h1 class="search-title"><?php echo $wp_query->found_posts; ?> Resultados encontrados para: <span><?php the_search_query(); ?></span></h1>
<?php if ( have_posts() ) { ?>
<ul class="results">
<?php while ( have_posts() ) { the_post(); ?>
<li>
<?php if ( has_post_thumbnail() ) { ?><div class="post-image"><a href="<?php echo get_permalink(); ?>"><?php the_post_thumbnail('thumbnail');?></a></div><?php }?>
<div class="post-content">
<h3><a href="<?php echo get_permalink(); ?>"><?php the_title(); ?></a></h3>
<p><?php echo substr(get_the_excerpt(), 0,140); ?>... <a href="<?php the_permalink(); ?>">Leer Más</a></p>
</div>
</li>
<?php } ?>
</ul>
<?php } ?>
¿Hay alguna variable que pueda agregar en algún lugar para que solo devuelva resultados de un tipo de entrada específico? Gracias

Bien, investigué un poco más y resulta que es bastante fácil. Solo necesitaba añadir un campo de entrada oculto en el formulario de búsqueda. Publico esto aquí para cualquiera que esté buscando la respuesta:
<form class="search" action="<?php echo home_url( '/' ); ?>">
<input type="search" name="s" placeholder="Buscar…">
<input type="submit" value="Buscar">
<input type="hidden" name="post_type" value="custom-post-type">
</form>
Obviamente, necesitarás reemplazar el valor "custom-post-type" con tu propio tipo de publicación personalizado.

Eso funcionó para mí, también si quieres incluir varios tipos de post puedes usar varios inputs con el nombre "post_type[]", por ejemplo si quieres buscar tanto en tipos "product" como "post": <input type="hidden" name="post_type[]" value="product" /><input type="hidden" name="post_type[]" value="post" />

Una solución más elegante sería modificar la consulta principal utilizando la acción pre_get_posts
.
<?php
function my_pre_get_posts($query) {
if( is_admin() )
return;
if( is_search() && $query->is_main_query() ) {
$query->set('post_type', 'custom-post-type-name');
}
}
add_action( 'pre_get_posts', 'my_pre_get_posts' );
Esto no requeriría ningún cambio en la plantilla.
