开发者

How to limit the wordpress tagcloud by date?

I've been searching for quite a while n开发者_Python百科ow 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

  • Obama (18 mentions)
  • New York (15 mentions)
  • Iron Man (11 mentions)
  • Robin Hood (7 mentions)

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 );


I'm pretty sure that Tags does not have timestamps - perhaps you could do a search for posts with specific tags for a certain timeperiod?


I think you can look at some of the plugins and see if your have a plugin like what you need


Yo can get the tag list with a query so you don't have to make a loop throw the last X post.

<ul id="footer-tags">
<?php $wpdb->show_errors(); ?> 
<?php
global $wpdb;
$term_ids = $wpdb->get_col("
    SELECT term_id FROM $wpdb->term_taxonomy
    INNER JOIN $wpdb->term_relationships ON $wpdb->term_taxonomy.term_taxonomy_id=$wpdb->term_relationships.term_taxonomy_id
    INNER JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->term_relationships.object_id
    WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= $wpdb->posts.post_date");

if(count($term_ids) > 0){

  $tags = get_tags(array(
    'orderby' => 'count',
    'order'   => 'DESC',
    'number'  => 28,
    'include' => $term_ids,
  ));
foreach ( (array) $tags as $tag ) {
echo '<li><a href="' . get_tag_link ($tag->term_id) . '" rel="tag">' . $tag->name . '</a></li>';
}
}
?>
</ul>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜