私は カスタム投稿タイプの検索 に 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;
}
変化する
<input type="hidden" name="post_type" value="software" />
に
<input type="hidden" name="post_type[]" value="software" />
<input type="hidden" name="post_type[]" value="books" />
私は実行する必要がありますが、これはうまくいくはずです。各投稿タイプに必要なだけ隠しフィールドを追加するだけです。
このようにして、単数型と任意の型を切り替えることができます。
<input type="hidden" name="post_type" value="software" />
<label for="post_type">Search all</label>
<input type="checkbox" name="post_type" value="any" />
チェックを外すとあなたの特定のタイプを検索し、チェックすると投稿タイプをanyに設定します。
私にはその解決策を働いています(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');