はじめに
以下を実現します。
外観→メニューのメニュー位置で設定したメニューのカテゴリーに投稿数を表示します。
この記事では、この方法について説明します。
完成イメージ

実装手順
以下のコードをfunctions.phpに追加します。
add_filter('wp_nav_menu_objects', function ($items, $args) {
// 対象のメニュー位置
$target_locations = [
'navi-header', // ヘッダーメニュー
'navi-mobile', // ヘッダーモバイルメニュー
'navi-header-mobile', // ヘッダーモバイルボタン
'navi-footer', // フッターメニュー
'navi-footer-mobile', // フッターモバイルボタン
'navi-mobile-slide-in', // モバイルスライドインメニュー
];
// 対象外の位置の場合
if (empty($args->theme_location) || !in_array($args->theme_location, $target_locations, true)) {
return $items;
}
foreach ($items as $item) {
if ($item->object === 'category') {
$category = get_category($item->object_id);
if (isset($category->count)) {
$item->title .= sprintf(' (%d)', $category->count);
}
}
}
return $items;
}, 10, 2);
補足
メニューも投稿の一部として扱われ、データベースの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) ""
}
}

