I've been searching for quite a while now to find a way to limit wordpress tags by date and order them by the amount of times they appeared in the selected timeframe. But I've been rather unsuccesful.
What I'm trying to achieve is something like the trending topics on Twitter. But in this case, 'trending tags'. By default the wordpress tagcloud displays the most popular tags of all time. Which makes no sense in my case, since I want to track current trends.
Ideally it would be something like:
Most popular tags of today
And then multiplied for 'most popular this week' and 'most popular this month'. Does anyone know of a way to achieve this?
Okay, so what I think you probably want is to do this for say, the last 50 posts.
Loop over the last n
posts, extract the term_id
of each tag for each post, then pass that string into the include
argument of wp_tag_cloud()
;
$how_many_posts = 50;
$args = array(
'posts_per_page' => $how_many_posts,
'orderby' => 'date',
'order' => 'DESC',
);
// get the last $how_many_posts, which we will loop over
// and gather the tags of
query_posts($args);
//
$temp_ids = array();
while (have_posts()) : the_post();
// get tags for each post
$posttags = get_the_tags();
if ($posttags) {
foreach($posttags as $tag) {
// store each tag id value
$temp_ids[] = $tag->term_id;
}
}
endwhile;
// we're done with that loop, so we need to reset the query now
wp_reset_query();
$id_string = implode(',', array_unique($temp_ids));
// These are the params I use, you'll want to adjust the args
// to suit the look you want
$args = array(
'smallest' => 10,
'largest' => 30,
'unit' => 'px',
'number' => 150,
'format' => 'flat',
'separator' => "\n",
'orderby' => 'count',
'order' => 'DESC',
'include' => $id_string, // only include stored ids
'link' => 'view',
'echo' => true,
);
wp_tag_cloud( $args );
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With