web-dev-qa-db-fra.com

Recherche dans plusieurs types d'articles et pages personnalisés

J'utilise bainternet method pour la recherche de post_types personnalisés et cela fonctionne très bien. Cependant, on m'a récemment demandé de renvoyer plus d'un type de message "spécifique" et éventuellement des pages individuelles pour une section de support sur notre site.

Je pensais que l'ajout de champs cachés ferait l'affaire, mais cela n'a pas fonctionné. Et je ne sais pas comment cela fonctionnera avec les pages.

Toute aide serait appréciée!


Dans le modèle:

<form action="http://apollo.website.net/" id="searchform" method="get" role="search">
    <div><label for="s" class="screen-reader-text">Search for:</label>
    <input type="text" id="s" name="s" value="">
    <input type="submit" value="Search" id="searchsubmit">

    <input type="hidden" name="post_type" value="software" />
    </div>
</form>

Dans functions.php:

/* Custom Search Queries */
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;
} 
6
Zach Shallbetter

changement

<input type="hidden" name="post_type" value="software" />

à

<input type="hidden" name="post_type[]" value="software" />
<input type="hidden" name="post_type[]" value="books" />

je dois courir mais cela devrait fonctionner, il suffit d'ajouter autant de champs cachés que nécessaire pour chaque type de message

12
Bainternet

Vous pouvez le faire comme ceci pour basculer entre un type de jeu singulier et tout type ..

<input type="hidden" name="post_type" value="software" />
<label for="post_type">Search all</label>
<input type="checkbox" name="post_type" value="any" />

Non cochée recherche votre type spécifique, cochée définit le type de publication sur n'importe quel type.

2
t31os

Pour moi, cette solution fonctionne (identique à celle de Bainternet, mais sans "[]" après "post_type"):

  <input type="hidden" name="post_type" value="photo">
  <input type="hidden" name="post_type" value="video">

Et pour obtenir un modèle spécifique pour les résultats de recherche basé sur le type de publication (sur 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');
0
Pedro Muraki