web-dev-qa-db-ja.com

Wordpressで特定の分類法を検索する方法

特定の分類法で投稿を検索しようとしていますが、検索するたびに、分類法で選択したカテゴリ内で検索するのではなく、他のすべてのページから結果が得られます。

私は私の分類法を "publication_categories"と名付けました。それは私が "出版物"と名付けたカスタム投稿タイプのためのすべてのカテゴリを含みます。これは私が私のcustom-search.phpのために持っているコードです:

<form method="get" id="searchform" action="<?php bloginfo('url'); ?>/">
<div class="alignleft">
<select name="taxonomy">
<option value="0">Select...</option>
<?php
$theterms = get_terms('publication_categories', 'orderby=name');
foreach ($theterms AS $term) :
    echo "<option value='".$term->slug."'".($_POST['publication_categories'] == $term->slug ? ' selected="selected"' : '').">".$term->name."</option>\n";
endforeach;
?>
</select>
</div>
<input type="text" value="<?php the_search_query(); ?>" name="s" id="s" class="searchinput" />
<input type="submit" id="searchbutton" value="Search" class="btn" />
</form>

あなたのコードにいくつか問題があります。

  1. フォームにpost_typeフィールドがありません。
  2. 分類法ドロップダウンの名前は、カスタム分類法の名前にする必要があります。
  3. フォームメソッドはGETに設定されていますが、POSTで選択を確認します。

したがって、フォームは次のようになります。

<form method="get" id="searchform" action="<?php bloginfo('url'); ?>/">
    <div class="alignleft">
        <select name="publication_categories">
            <option value="0">Select...</option>
            <?php
            $theterms = get_terms('publication_categories', 'orderby=name');
            foreach ($theterms AS $term) :
                echo "<option value='".$term->slug."'".($_GET['publication_categories'] == $term->slug ? ' selected="selected"' : '').">".$term->name."</option>\n";
            endforeach;
            ?>
        </select>
    </div>
    <input type="text" value="<?php the_search_query(); ?>" name="s" id="s" class="searchinput" />
    <input type="hidden" name="post_type" value="publication" />
    <input type="submit" id="searchbutton" value="Search" class="btn" />
</form>
2
Bainternet

おそらくこれはあなたのフォームに追加されましたか?

<input type="hidden" name="post_type" value="publication" />
1
Carpy