登録済みのカスタムタクソノミーareaで、管理画面の「投稿一覧」を絞り込む例です。表示用の選択欄と一覧クエリの条件をセットで追加します。タクソノミーのquery_var設定に依存せず、タームIDで指定します。
前提と貼り付け先
areaが通常の投稿(post)へ登録されていることを確認します。タクソノミー自体はこのコードで作成しません。子テーマのfunctions.php、またはPHPスニペットを管理する既存の方法に、次のコードを一度だけ追加してください。functions.phpの既存PHPタグ内へ貼る場合、開始タグは追加しません。
function waza_area_filter_id() {
$value = $_GET['waza_area_filter'] ?? '';
if (!is_string($value) || !ctype_digit($value)) {
return 0;
}
return absint($value);
}
function waza_area_filter_control($post_type, $which) {
if ('post' !== $post_type || 'top' !== $which || !is_object_in_taxonomy('post', 'area')) {
return;
}
echo '<label class="screen-reader-text" for="waza-area-filter">地域で絞り込む</label>';
wp_dropdown_categories(array(
'taxonomy' => 'area', 'name' => 'waza_area_filter', 'id' => 'waza-area-filter',
'show_option_all' => 'すべての地域', 'hide_empty' => false,
'value_field' => 'term_id', 'selected' => waza_area_filter_id(),
'hierarchical' => true, 'orderby' => 'name',
));
}
add_action('restrict_manage_posts', 'waza_area_filter_control', 10, 2);
function waza_area_filter_query($query) {
global $pagenow;
if (!is_admin() || 'edit.php' !== $pagenow || !$query->is_main_query()
|| 'post' !== $query->get('post_type', 'post')
|| !is_object_in_taxonomy('post', 'area')) {
return;
}
$id = waza_area_filter_id();
if (!$id) { return; }
$term = get_term($id, 'area');
if (!$term || is_wp_error($term)) { return; }
$condition = array('taxonomy' => 'area', 'field' => 'term_id', 'terms' => array($id));
$existing = $query->get('tax_query');
$query->set('tax_query', $existing
? array('relation' => 'AND', $existing, $condition)
: array($condition));
}
add_action('pre_get_posts', 'waza_area_filter_query');
地域を解除しても他の条件は残る
| 操作 | 期待する一覧 |
|---|---|
| 地域と検索語を指定して絞り込み | 両方に一致する投稿 |
| すべての地域へ戻して絞り込み | 地域の指定だけを外し、検索語や日付の指定は残る |
| 親の地域を選択 | 親とその子の地域に属する投稿 |
| 複数の既存分類条件がある | 既存のOR条件を保ったまま地域条件とANDで組み合わせる |
地域を解除しても一覧が元に戻らない場合は、検索欄・日付・カテゴリーなどの指定が残っていないかを確認します。すべての投稿へ戻したい場合は、それぞれの条件も解除してください。
登録名areaは管理画面に表示される「地域」などのラベルと異なる場合があります。登録に使ったコードやプラグインの設定で名前を確認し、別の分類を使う場合はコード内のareaを同じ名前へ変更します。このコードだけでは分類やタームは作られません。
実WordPressの管理画面用クエリで、既存のタグOR条件・検索語と地域条件の組み合わせ、地域だけを解除した結果、子地域の選択値を確認しました。今回は選択欄のキーボード操作と、検索語・月・カテゴリーを併用した実一覧の選択・解除も確認しています。
キーボードで地域を選び、解除後の一覧を比べる
実際の投稿一覧で、検索語・月・カテゴリーを指定したうえで地域欄をキーボードのEndで選択し、絞り込みボタンをEnterで実行しました。東京に属する検証記事Aだけが表示されました。地域欄をHomeで「すべての地域」へ戻してEnterで実行すると、記事Aと大阪の記事Bが表示されました。
解除後のURLと選択欄には検索語・月・カテゴリーが残り、地域の値だけが0になりました。地域を解除しても他の条件で件数が減っている場合、地域フィルターの不具合とは限りません。検索欄や日付・カテゴリーも合わせて確認します。
End・Homeの移動先は選択欄の並びに依存します。導入先では目的の地域名が選択されていることを読み取ってから絞り込んでください。子タームや他プラグインの条件は、そのサイトの構成で別途比較します。

URLの地域値が不正な場合と、別の投稿タイプへの影響を確認する
| 投稿一覧へ渡した条件 | 実際の追加フィルター | 確認結果 |
|---|---|---|
| 通常投稿・地域値が配列型 | 適用しない | キーワードに一致する通常投稿1件を維持 |
| 通常投稿・存在しない地域ID | 適用しない | 地域選択は「すべての地域」、通常投稿1件を維持 |
| 制作事例・存在する地域ID | 対象外 | 追加の地域選択欄なし、検索結果2件を維持 |
この実装の対象は、管理画面にある通常投稿の一覧です。
制作事例など別の投稿タイプの一覧まで一律に変更するコードではありません。
地域の値は、文字列の正の整数であり、対象タクソノミーに実在する項目であることを確認してから、一覧のクエリへ追加します。
ブラウザーで一覧URLを開いて確認したところ、配列型の値と存在しないIDは絞り込みに使われず、キーワードに一致する通常投稿が残りました。
また、地域値を付けた制作事例の一覧では追加の地域選択欄が出ず、異なる地域の制作事例2件が残りました。
画像は対象外の制作事例一覧で、地域の管理用列と本記事の追加ドロップダウンが別の機能であることも確認できます。
不正な値を無視することは、閲覧権限の付与や公開側の検索制御ではありません。
管理画面へのアクセス権限はWordPressの通常の権限設定に従います。
導入後は地域の選択・解除を試すだけでなく、別の投稿タイプの一覧を開き、不要な追加欄や絞り込みが出ないことも確認してください。
戻す場合は本記事で追加したPHPを停止し、一覧URLからwaza_area_filterを取り除きます。
分類や投稿そのものを削除して戻す操作は不要です。

親地域と子地域を選び分ける
| 選ぶ地域 | 含まれる記事 |
|---|---|
| 親の地域 | 親だけの記事と子地域の記事 |
| 子の地域 | その子地域の記事 |
areaを階層ありのタクソノミーとして登録すると、親の地域を選んだ絞り込みには子地域の記事も含まれます。
このコードのtax_queryは子を含めるWordPressの既定動作を使います。
親地域だけの記事と子地域だけの記事を1件ずつ用意すると、親の選択では2件、子の選択では1件が表示されます。
親を選んでも親に直接割り当てた記事だけになる、という仕様ではありません。
2026年10月3日の隔離したWordPress 7.1.2 / SWELL 2.19.0では、この2つの結果を投稿一覧で確認しました。
地域の選択欄をキーボードで変更し、FilterをEnterキーで実行しています。
親へ直接割り当てた記事だけを求める場合は、先に運用上の必要性を整理し、tax_queryのinclude_childrenをfalseにする変更を別途検証してください。
この記事の掲載コードは子を含む仕様のままです。
戻すときは絞り込みのフック登録を無効にし、投稿一覧の地域条件を解除します。
地域そのものや記事との割り当てを削除する必要はありません。

選択・解除・対象外を確認する
投稿一覧の上部で地域を選び「絞り込み」を押します。「すべての地域」で地域条件を解除します。検索や日付など他の条件は別に残ります。地域の子タームも含む標準の階層検索です。未登録のタクソノミー、別の投稿タイプ、公開側のクエリには追加しません。
ターム数が非常に多い場合は選択欄の出力が大きくなるため、検索式のUIなどを別途設計します。戻す場合は今回の2つのフック登録と関数を外します。タームや投稿データは削除しません。
仕様:restrict_manage_posts、pre_get_posts。実一覧でのキーボード操作は上記の条件で確認しました。他プラグインとの併用や大量タームの操作は、対象構成の検証環境で確認してください。



