如何按日期限制wordpress tagcloud?

时间:2010-05-31 03:40:04

标签: wordpress date tags limit

我一直在寻找一种方法来找到一种方法来按日期限制wordpress标签,并按照它们在所选时间范围内出现的次数进行排序。但我一直很不成功。

我想要实现的是类似Twitter上的热门话题。但在这种情况下,'趋势标签'。默认情况下,wordpress tagcloud会显示有史以来最受欢迎的标签。这在我的案例中毫无意义,因为我想追踪当前的趋势。

理想情况下会是这样的:

今天最受欢迎的标签

  • 奥巴马(18提及)
  • 纽约(15提及)
  • 钢铁侠(11提及)
  • 罗宾汉(7提及)

然后乘以“本周最受欢迎”和“本月最受欢迎”。有谁知道实现这个目标的方法?

4 个答案:

答案 0 :(得分:3)

好的,我认为你可能想要的是这样做,比如说,最后50篇帖子。

循环播放最后n个帖子,为每个帖子提取每个标记的term_id,然后将该字符串传递给wp_tag_cloud()include参数;

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

答案 1 :(得分:0)

我很确定标签没有时间戳 - 也许您可以在特定时间段内搜索具有特定标签的帖子?

答案 2 :(得分:0)

我想你可以查看一些插件,看看你是否有一个像你需要的插件

答案 3 :(得分:0)

哟可以通过查询获取标记列表,这样您就不必进行循环抛出最后的X帖子。

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