【WordPress】管理画面に独自のフィルター機能を追加する方法(カテゴリー・カスタムフィールド対応)

【WordPress】管理画面に独自のフィルター機能を追加する方法(カテゴリー・カスタムフィールド対応) WordPress

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管理画面に独自のフィルター機能を追加することで、
投稿の絞り込み作業を効率化し、運用の生産性を高めることができます。

特に、カスタムフィールドを活用しているサイトでは、標準のフィルターでは対応しきれないケースも多く、今回の方法が非常に有効です。

管理画面の操作性を改善したい方は、ぜひ導入を検討してみてください。