web-dev-qa-db-de.com

Durchsuchen mehrerer benutzerdefinierter Beitragstypen und -seiten

Ich verwende die Methode bainternet für die Suche nach benutzerdefinierten post_types und das funktioniert hervorragend. Vor kurzem wurde ich jedoch aufgefordert, mehr als einen "bestimmten" Beitragstyp und möglicherweise einzelne Seiten für einen Supportabschnitt auf unserer Website zurückzugeben.

Ich dachte, dass das Hinzufügen zusätzlicher ausgeblendeter Felder dazu führen würde, aber das hat nicht funktioniert. Und ich habe keine Ahnung, wie das mit Seiten funktionieren wird.

Jede Hilfe wäre dankbar!


In der Vorlage:

<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>

In 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

veränderung

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

zu

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

ich muss ausführen, aber das sollte funktionieren. Fügen Sie einfach so viele ausgeblendete Felder hinzu, wie Sie für jeden Beitragstyp benötigen

12
Bainternet

Sie können dies tun, um zwischen einem singulären Settyp und einem beliebigen Typ zu wechseln.

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

Wenn das Kontrollkästchen deaktiviert ist, wird nach Ihrem Typ gesucht und der Beitragstyp auf einen beliebigen Typ gesetzt.

2
t31os

Bei mir funktioniert diese Lösung (wie bei Bainternet, jedoch ohne "[]" nach "post_type"):

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

Und um eine spezifische Vorlage für Suchergebnisse zu erhalten, die auf den Beitragstypen (in functions.php) basiert:

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