Um eine solche Abfrage zu realisieren, braucht es ein wenig MySQL in Verbindung mit WordPress. Mit der Funktion getCategoriesWithMostArticlesInLastDays() kann man die beliebtesten X Kategorien innerhalb der letzten Y Tage bestimmen:
function getCategoriesWithMostArticlesInLastDays($categoriesCount, $lastDaysCount)
{
global $wpdb;
$querystr = "
SELECT $wpdb->terms.name AS categoryName,COUNT($wpdb->terms.term_id) AS countCategory, $wpdb->terms.term_id as categoryId
FROM $wpdb->posts
LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms ON ($wpdb->terms.term_id = $wpdb->term_taxonomy.term_id)
WHERE
$wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'post'
AND $wpdb->posts.post_date > TIMESTAMP(DATE_SUB(NOW(), INTERVAL $lastDaysCount DAY ))
AND $wpdb->term_taxonomy.taxonomy = 'category'
GROUP BY $wpdb->terms.term_id
ORDER BY COUNT($wpdb->terms.term_id) DESC
LIMIT $categoriesCount
";
$categoriesWithMostArticlesInLastDays = $wpdb->get_results($querystr, ARRAY_A);
foreach($categoriesWithMostArticlesInLastDays as $key => $category)
{
$categoriesWithMostArticlesInLastDays[$key]["link"] = get_category_link($category['categoryId']);
}
return $categoriesWithMostArticlesInLastDays;
}
