BLOG

ブログ
  • Web制作

WordPress 投稿一覧の管理画面にカテゴリー別ソート機能を実装

はじめに

WordPressの投稿やカスタム投稿で記事の投稿を続けていると、記事が増えてきて特定のカテゴリーに関連する投稿を見つけるのが難しくなることがあります。

こういった問題を解決するために、WordPressの管理画面にカテゴリー別ソート機能を実装していきます。

デフォルトの仕様

デフォルトの投稿一覧画面では上図のように

・投稿タイトル
・日付

のみが表示されています。

「カテゴリー」項目を追加

functions.php に下のコードを追加します。

function my_custom_column($columns)
{
    $columns['{タクソノミースラッグ}'] = 'カテゴリ';
    return $columns;
}
add_filter('manage_{カスタム投稿タイプスラッグ}_posts_columns', 'my_custom_column');

function my_custom_column_id($column_name, $id)
{
    $terms = get_the_terms($id, $column_name);
    if ($terms && !is_wp_error($terms)) {
        $menu_terms = array(); //変数名は任意
        foreach ($terms as $term) {
            $menu_terms[] = $term->name;
        }
        echo join(", ", $menu_terms);
    }
}
add_action('manage_{カスタム投稿タイプスラッグ}_posts_custom_column', 'my_custom_column_id', 10, 2);

タクソノミースラッグ → works_category
カスタム投稿タイプスラッグ → works

の場合は↓のようになります。

function my_custom_column($columns)
{
    $columns['works_category'] = 'カテゴリ';
    return $columns;
}
add_filter('manage_works_posts_columns', 'my_custom_column');

function my_custom_column_id($column_name, $id)
{
    $terms = get_the_terms($id, $column_name);
    if ($terms && !is_wp_error($terms)) {
        $category_terms = array(); //変数名は任意
        foreach ($terms as $term) {
            $category_terms[] = $term->name;
        }
        echo join(", ", $category_terms);
    }
}
add_action('manage_works_posts_custom_column', 'my_custom_column_id', 10, 2);

すると上図のように

・カテゴリー

項目が増えました。

ソート機能を追加

次にカテゴリーでソートできるように機能を実装します。

functions.php に下のコードを追加します。

function my_add_filter()
{
    global $post_type;
    if ('{カスタム投稿タイプ}' == $post_type) {
?>
        <select name="{タクソノミースラッグ}">
            <option value="">すべてのカテゴリー</option>
            <?php
            $terms = get_terms('{タクソノミースラッグ}');
            foreach ($terms as $term) {
            ?>
                <option value="<?php echo $term->slug; ?>" <?php if (isset($_GET['{タクソノミースラッグ}']) && $_GET['{タクソノミースラッグ}'] == $term->slug) {
                                                                print 'selected';
                                                            } ?>><?php echo $term->name; ?>
                         </option>
            <?php
            }
            ?>
        </select>
    <?php
    }
}
add_action('restrict_manage_posts', 'my_add_filter');

タクソノミースラッグ → works_category
カスタム投稿タイプスラッグ → works

の場合は↓のようになります。

function my_add_filter()
{
    global $post_type;
    if ('products' == $post_type) {
?>
        <select name="works_category">
            <option value="">すべてのカテゴリー</option>
            <?php
            $terms = get_terms('works_category');
            foreach ($terms as $term) {
            ?>
                <option value="<?php echo $term->slug; ?>" <?php if (isset($_GET['works_category']) && $_GET['works_category'] == $term->slug) {
                                                                print 'selected';
                                                            } ?>><?php echo $term->name; ?>
                </option>
            <?php
            }
            ?>
        </select>
<?php
    }
}
add_action('restrict_manage_posts', 'my_add_filter');

すると上図のように

・カテゴリー

で絞り込みができるようになりました。

まとめ

functions.php にコードを追加するだけで管理画面にカテゴリー別ソート機能を追加することができました。

これにより、投稿を効率的に管理し、特定のカテゴリーに関連する投稿を素早く見つけることができるようになります。