- 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サイト制作実績 120 サイト以上。ディレクション、デザイン、コーディング、WordPress 構築まで手掛けます。Web制作に関わる情報やワーケーション日記などを執筆しています。