管理画面、WordPress、カスタム投稿をカテゴリで絞り込む方法

Web運用(サイト構築)

WordPressを利用していると、管理画面で特定の投稿タイプを絞り込んで管理したいというニーズが出てくることがあります。特に、カスタム投稿タイプを使っている場合、その絞り込み機能がデフォルトでは備わっていないため、自分で実装する必要があります。

この記事では、カスタム投稿タイプの一覧ページにカテゴリ(タクソノミー)での絞り込み検索を追加する方法を解説します。

実現する機能

以下の機能を追加します。

  1. 管理画面の投稿一覧ページで、カスタム投稿タイプを絞り込むプルダウンメニューを表示。
  2. プルダウンメニューを利用して、特定のカテゴリに属する投稿だけを表示。

コードの解説

以下のコードを functions.php に追加することで、管理画面に絞り込み機能を実装できます。

カスタム投稿タイプのタクソノミー絞り込み

// カスタム投稿タイプに対するカテゴリー絞り込み検索を追加する関数
function custom_post_type_taxonomy_filter() {
    global $typenow; // 現在の投稿タイプを取得

    // カスタム投稿タイプを指定
    $post_types = array('it'); // 'it'をカスタム投稿タイプに置き換えてください

    // 現在の投稿タイプが指定されたカスタム投稿タイプのいずれかである場合
    if (in_array($typenow, $post_types)) {
        // カテゴリーのタクソノミーを取得
        $taxonomies = get_object_taxonomies($typenow, 'objects');

        // タクソノミーが存在する場合
        if ($taxonomies) {
            foreach ($taxonomies as $tax_slug => $taxonomy) {
                // タームを取得
                $terms = get_terms($tax_slug);

                if ($terms) {
                    echo '<select name="' . $tax_slug . '" id="' . $tax_slug . '" class="postform">';
                    echo '<option value="">すべての' . $taxonomy->label . '</option>';

                    foreach ($terms as $term) {
                        // 現在選択されているタームを選択状態にする
                        $selected = (isset($_GET[$tax_slug]) && $_GET[$tax_slug] == $term->slug) ? ' selected="selected"' : '';
                        echo '<option value="' . $term->slug . '"' . $selected . '>' . $term->name . '</option>';
                    }

                    echo '</select>';
                }
            }
        }
    }
}

// 投稿一覧ページのフィルタリング領域に絞り込み検索を追加
function add_custom_post_type_taxonomy_filter() {
    global $post_type;
    if ('it' == $post_type) { // 'it'を対象の投稿タイプに置き換えてください
        add_action('restrict_manage_posts', 'custom_post_type_taxonomy_filter');
    }
}
add_action('admin_head', 'add_custom_post_type_taxonomy_filter');
PHP

コードのポイント

  1. カスタム投稿タイプの指定
    • $post_types に絞り込み検索を追加したい投稿タイプを設定します。
  2. タクソノミーの取得
    • get_object_taxonomies 関数を利用して、指定した投稿タイプのタクソノミー(カテゴリやタグなど)を取得します。
  3. タームのリストを表示
    • 各タクソノミーに属するターム(カテゴリやタグ)を get_terms 関数で取得し、<select> 要素として表示します。
  4. 選択状態の保持
    • 現在のフィルター条件に応じて選択状態を反映します。

実装結果

このコードを適用すると、カスタム投稿タイプの一覧ページにカテゴリ選択用のプルダウンメニューが追加されます。これにより、指定したカテゴリに属する投稿のみを簡単に絞り込んで表示できるようになります。

注意点

  • カスタム投稿タイプやタクソノミー名は、サイトごとに異なるため、コード内の 'it' を実際の投稿タイプに置き換えてください。
  • 必要に応じて、セキュリティ対策(ユーザー権限の確認など)を追加することをおすすめします。

これで、WordPressの管理画面でカスタム投稿をカテゴリで絞り込む機能を簡単に実装できます!管理画面の利便性が向上し、日々の運用がよりスムーズになることでしょう。

コメント

タイトルとURLをコピーしました