Code Snippet
The number of posts contained in each WordPress category (post count) can be displayed in the main menu when using categories as links.
Note
This technique ONLY applies to main menu links that are category links.
PHP
Place the following code anywhere in your child theme’s functions.php document.
// add a post count after main menu category links
function add_post_count_to_menu_item($title, $post_ID) {
if( 'nav_menu_item' == get_post_type($post_ID) ) {
if( 'taxonomy' == get_post_meta($post_ID, '_menu_item_type', true) && 'category' == get_post_meta($post_ID, '_menu_item_object', true) ) {
$category = get_category( get_post_meta($post_ID, '_menu_item_object_id', true) );
$title = $title . ' ' . '<span class="post_count">(' . $category->count . ')</span>';
}
}
return $title;
}
add_filter('the_title', 'add_post_count_to_menu_item', 10, 2);
Note
All modifications to a theme or plugin should be made by creating a child theme and placing the changes there. Changes made to the parent theme will be overwritten the next time it updates.
CSS
In the PHP, we now have the post count added at the end of each category link, and we have it wrapped in an HTML span with the class .post_count so that we can apply styles.
To make things look nicer, we can add a font-size and color to the font, that will make it differ slightly from the link text.
.post_count { /* post count in main menu */
font-size: 80%;
color: #808080;
}
Example
See the header menu on this page for an example of what this can look like.
WordPress Notes:
- All modifications to a theme or plugin should be made by creating a child theme and placing the changes there; changes made to the parent theme will be overwritten the next time it updates
We’d like to acknowledge that we learned a great deal of our coding from W3Schools and TutorialsPoint, borrowing heavily from their teaching process and excellent code examples. We highly recommend both sites to deepen your experience, and further your coding journey. We’re just hitting the basics here at 1SMARTchicken.