WordPressの投稿一覧画面(管理画面)では、デフォルトで「カテゴリー」や「日付」などの絞り込みが可能です。
しかし、より細かい条件でフィルタリングしたい場合は、自前で独自のフィルター(ドロップダウンメニューなど)を追加する必要があります。
この記事では、カテゴリーおよびカスタムフィールドの2つに対応した独自フィルター機能を投稿一覧に追加する方法を紹介します。
投稿一覧にカテゴリーのフィルターを追加する
まずは、投稿一覧の上部にカテゴリーを選択できるプルダウンを追加します。
コード例(functions.php)
function add_custom_category_filter() {
global $typenow;
if ($typenow === 'post') { // 投稿タイプが 'post' の場合
$taxonomy = 'category';
$selected = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : '';
$info_taxonomy = get_taxonomy($taxonomy);
wp_dropdown_categories(array(
'show_option_all' => sprintf(__('すべての%s', 'textdomain'), $info_taxonomy->label),
'taxonomy' => $taxonomy,
'name' => $taxonomy,
'orderby' => 'name',
'selected' => $selected,
'hierarchical' => true,
'depth' => 0,
'show_count' => true,
'hide_empty' => false,
));
}
}
add_action('restrict_manage_posts', 'add_custom_category_filter');
このコードにより、「カテゴリー」のドロップダウンが投稿一覧に追加されます。
投稿一覧にカスタムフィールドのフィルターを追加する
たとえば、ACFなどで追加された「担当者」などのカスタムフィールドに応じて絞り込む場合の例です。
フィルタープルダウンを追加
function add_custom_meta_filter() {
global $typenow;
if ($typenow === 'post') {
$values = array('山田', '佐藤', '田中'); // 選択肢を定義
echo '<select name="custom_staff">';
echo '<option value="">すべての担当者</option>';
foreach ($values as $value) {
$selected = (isset($_GET['custom_staff']) && $_GET['custom_staff'] === $value) ? 'selected' : '';
echo '<option value="' . esc_attr($value) . '" ' . $selected . '>' . esc_html($value) . '</option>';
}
echo '</select>';
}
}
add_action('restrict_manage_posts', 'add_custom_meta_filter');
絞り込み条件を適用(pre_get_posts)
function filter_posts_by_custom_meta($query) {
global $pagenow;
if (
is_admin() && $pagenow === 'edit.php' &&
isset($_GET['custom_staff']) && $_GET['custom_staff'] !== ''
) {
$query->query_vars['meta_key'] = '担当者'; // カスタムフィールド名
$query->query_vars['meta_value'] = $_GET['custom_staff'];
}
}
add_action('pre_get_posts', 'filter_posts_by_custom_meta');
応用 カスタム投稿タイプにも対応させたい場合
上記の $typenow === ‘post’ を、$typenow === ‘your_custom_post_type’ に変更することで、カスタム投稿タイプにも柔軟に対応可能です。
まとめ
WordPress管理画面に独自のフィルター機能を追加することで、
投稿の絞り込み作業を効率化し、運用の生産性を高めることができます。
特に、カスタムフィールドを活用しているサイトでは、標準のフィルターでは対応しきれないケースも多く、今回の方法が非常に有効です。
管理画面の操作性を改善したい方は、ぜひ導入を検討してみてください。