web-dev-qa-db-ja.com

複数のカスタム投稿タイプとページを検索する

私は カスタム投稿タイプの検索bainternet's メソッドを使っていますが、とてもうまくいきます。しかし、私は最近私たちのサイトのサポートセクションに複数の "特定の"投稿タイプとおそらく個々のページを返すように要求されました。

隠しフィールドを追加してもうまくいくと思いましたが、うまくいきませんでした。そして私はこれがどのようにしてページで機能するのかは分かりません。

任意の助けは大歓迎です!


テンプレート内:

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

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

変化する

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

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

私は実行する必要がありますが、これはうまくいくはずです。各投稿タイプに必要なだけ隠しフィールドを追加するだけです。

12
Bainternet

このようにして、単数型と任意の型を切り替えることができます。

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

チェックを外すとあなたの特定のタイプを検索し、チェックすると投稿タイプをanyに設定します。

2
t31os

私にはその解決策を働いています(Bainternetのものと同じですが、 "post_type"の後に "[]"は含みません)。

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

投稿タイプに基づいた検索結果の特定のテンプレートを取得するには(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