If you’ve ever found yourself grappling with the task of fetching the top three categories with the most posts per user in WordPress, you’re not alone. Fortunately, the community has shared some insights on achieving this goal. In this guide, we’ll walk you through the process step by step.

Understanding the Problem

One user posted a SQL query attempting to retrieve the first three categories with the most posts per user. Another user suggested using wp_query in WordPress to achieve this, but a follow-up comment expressed concerns about the computational cost and the need for multiple requests.

Solution 1: Using Multiple Queries with wp_query

The first solution involves using wp_query in a series of steps to gather the required information. Here’s a breakdown:

      1. Fetch All Posts by the Author
        $author = 'johndoe';
        $author_posts = new WP_Query(array(
        'author' => $author,
        'posts_per_page' => -1,


      2. Collect Categories in an Array:$cat_array = array();
        if ($author_posts->have_posts()) {
        while ($author_posts->have_posts()) {
        $cat_array[] = wp_get_post_categories(get_the_ID(), array('fields' => 'names'));
      3. Count Category Occurrences:

        $cat_count = array_count_values($cat_array); arsort($cat_count);
      4. Query Posts in the Top 3 Categories:
        $top_cats = $cat_count[0] . ',' . $cat_count[1] . ',' . $cat_count[2];
        $author_posts = new WP_Query(array(
        'author' => $author,
        'posts_per_page' => -1,
        'category_name' => $top_cats,
  1. While this solution provides the desired outcome, it’s acknowledged that it might be computationally expensive.

    Solution 2: PHP Function for Better Organization

    Another user proposed a PHP function that could be added to the functions.php file or a plugin. This function streamlines the process and improves organization. Here’s how to implement it:

      1. Add the Function to functions.php or a Plugin:
        function wpse_240422_get_author_post_categories($author_id) {
        // Function code here


      2. Call the Function and Retrieve Categories:
        $author_categories = array_keys(wpse_240422_get_author_post_categories(1));
      3. Access the Top 3 Categories:
        $most_1st = $author_categories[0]; // Top most 'used' category
        $most_2nd = $author_categories[1]; // Second most 'used' category
        $most_3rd = $author_categories[2]; // Third most 'used' category

        By utilizing this function, you can neatly encapsulate the logic and retrieve the top categories with ease.
        In conclusion, these solutions offer different approaches to the same problem. Choose the one that best fits your needs and coding preferences.

Leave a Reply

Your email address will not be published. Required fields are marked *