はじめに
グローバルナビメニューのカテゴリーに投稿数を表示する方法について、以下を整理します。
完成イメージ

実装手順
以下のコードをfunctions.phpに追加します。
add_filter('the_title', function($title, $post_ID) {
// ナビゲーションメニューの場合
if (get_post_type($post_ID) == 'nav_menu_item') {
// メニューアイテムがカテゴリーの場合
if (get_post_meta($post_ID, '_menu_item_object', true) == 'category') {
// カテゴリーIDを取得
$category = get_category(get_post_meta($post_ID, '_menu_item_object_id', true));
// カテゴリーの投稿数が0以上の場合
if ($category->count >= 0) {
// タイトルにカテゴリーの投稿数を追加
$title .= sprintf(' (%d)', $category->count);
}
}
}
return $title;
}, 10, 2);
補足
メニューも投稿の一部として扱われ、DBのwp_postmeta
の拡張で情報が管理されます。
表1にメニューの情報を示します。
キー | 内容 |
---|---|
_menu_item_type |
|
_menu_item_menu_item_parent | 親メニュー=1 |
_menu_item_object_id | オブジェクトID |
_menu_item_object |
|
_menu_item_target | 1=_blank |
_menu_item_classes | CSS class |
_menu_item_xfn | |
_menu_item_url | カスタムリンクのURL |
array(8) {
["_menu_item_type"]=>array(1) {
[0]=>string(9) "post_type"
}
["_menu_item_menu_item_parent"]=>array(1) {
[0]=>string(1) "0"
}
["_menu_item_object_id"]=>array(1) {
[0]=>string(4) "7949"
}
["_menu_item_object"]=>array(1) {
[0]=>string(4) "page"
}
["_menu_item_target"]=>array(1) {
[0]=>string(6) "_blank"
}
["_menu_item_classes"]=>array(1) {
[0]=>string(22) "a:1:{i:0;s:5:"class";}"
}
["_menu_item_xfn"]=>array(1) {
[0]=> string(0) ""
}
["_menu_item_url"]=>array(1) {
[0]=>string(0) ""
}
}
参考:ボックスメニューのカテゴリーに投稿数を表示
以下を使用すれば、ボックスメニューにも投稿数を表示できます。
メニュー位置の判定を削除すると、メニュー設定全体に投稿数が反映されます。
- ヘッダーメニュー
- フッターメニュー
- おすすめカード
- ナビカード
- ナビゲーションメニュー
add_filter('wp_get_nav_menu_items', function($items, $menu, $args) {
// 該当のメニューの場合
if ($menu->name == 'ボックスメニュー名') {
foreach ($items as $item) {
// メニューアイテム名がカテゴリーの場合
if ($item->object == 'category') {
// カテゴリー情報を取得
$category = get_category(get_post_meta($item->ID, '_menu_item_object_id', true));
// カテゴリーの投稿数が0以上の場合
if (isset($category) && $category->count >= 0) {
// メニューアイテムのタイトルにカテゴリーの投稿数を追加
$item->title .= sprintf(' (%d)', $category->count);
}
}
}
}
return $items;
}, 10, 3);
さいごに
今回紹介した方法を使えば、グローバルナビメニューにカテゴリーごとの投稿数を簡単に表示できます。
これにより、ユーザーは各カテゴリーの活性度を一目で把握でき、ナビゲーションがより便利になるでしょう。