- 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 にコードを追加するだけで管理画面にカテゴリー別ソート機能を追加することができました。
これにより、投稿を効率的に管理し、特定のカテゴリーに関連する投稿を素早く見つけることができるようになります。
名古屋の Web 制作会社で 9 年半働いた後フリーランスに。中小企業のWEBサイト制作実績 100 サイト以上。ディレクション、デザイン、コーディング、WordPress 構築まで手掛けます。主にWeb系の情報をお届けします。