Búsqueda en múltiples tipos de entradas personalizadas y páginas
Estoy utilizando el método de bainternet para buscar en tipos de entradas personalizadas y funciona muy bien. Sin embargo, recientemente me pidieron que devolviera más de un tipo de entrada "específico" y quizás páginas individuales para una sección de soporte en nuestro sitio.
Pensé que agregar campos ocultos adicionales lo resolvería, pero no funcionó. Y no tengo idea de cómo hacer que esto funcione con páginas.
¡Cualquier ayuda sería apreciada!
En la plantilla:
<form action="http://apollo.website.net/" id="searchform" method="get" role="search">
<div><label for="s" class="screen-reader-text">Buscar:</label>
<input type="text" id="s" name="s" value="">
<input type="submit" value="Buscar" id="searchsubmit">
<input type="hidden" name="post_type" value="software" />
</div>
</form>
En functions.php:
/* Consultas de búsqueda personalizadas */
function SearchFilter($query) {
$post_type = $_GET['post_type'];
if (!$post_type) {
$post_type = 'any';
}
if ($query->is_search) {
$query->set('post_type', $post_type);
};
return $query;
}

cambiar
<input type="hidden" name="post_type" value="software" />
a
<input type="hidden" name="post_type[]" value="software" />
<input type="hidden" name="post_type[]" value="books" />
tengo que irme pero esto debería funcionar, solo agrega tantos campos ocultos como necesites para cada tipo de publicación

¡Funciona genial, gracias! ¿Hay alguna manera de que también devuelva páginas relacionadas?

Los valores de entrada en arrays no funcionarán con el método GET
, me sorprendería que ese código realmente haga lo que crees que hace...

Podrías hacerlo así para alternar entre un tipo de publicación singular y cualquier tipo...
<input type="hidden" name="post_type" value="software" />
<label for="post_type">Buscar en todos</label>
<input type="checkbox" name="post_type" value="any" />
Cuando no está marcado, busca en tu tipo específico; cuando está marcado, establece el tipo de publicación a "cualquiera"...

Para mí funciona esta solución (igual que la de Bainternet, pero sin los "[]" después de "post_type"):
<input type="hidden" name="post_type" value="photo">
<input type="hidden" name="post_type" value="video">
Y para obtener una plantilla específica para los resultados de búsqueda según el tipo de publicación (en functions.php):
function search_template_chooser($template) {
global $wp_query;
$post_type = get_query_var('post_type');
if( $wp_query->is_search && $post_type == 'photo' || $wp_query->is_search && $post_type == 'video' ) {
return locate_template('search-media.php');
}
return $template;
}
add_filter('template_include', 'search_template_chooser');
