Forums

Limit tags by date (14 posts)

  1. Dinho78
    Member
    Posted 2 years ago #

    Hello,

    I may be blind, but I can't find a plugin that simply limits tags by date. F.e. most popular tags today, this week, this month etc. Can anyone point me to it.

    Thanks in advance.

  2. Dinho78
    Member
    Posted 2 years ago #

    Anyone?

  3. MichaelH
    Volunteer
    Posted 2 years ago #

    <?php
    // get 20 latest posts, display the tags used on those posts
    $tag_array = array();
    $args=array(
      'post_type' => 'post',
      'post_status' => 'publish',
      'posts_per_page' => 20,
      'caller_get_posts'=> 1
      );
    $my_query = null;
    $my_query = new WP_Query($args);
    if( $my_query->have_posts() ) {
      while ($my_query->have_posts()) : $my_query->the_post();
        $tag_args=array('orderby' => 'none');
        $tags = wp_get_post_terms( $post->ID , 'post_tag', $tag_args);
        foreach($tags as $tag) {
          $tag_array[$tag->term_id] = $tag->term_id;
        }
      endwhile;
    }
    if ($tag_array) {
      echo '<p>List of tags used on 20 latest posts</p>';
      foreach($tag_array as $post_tag) {
        $tag = get_term_by('ID',$post_tag, 'post_tag');
        echo '<p><a href="' . esc_attr(get_term_link($tag, 'category')) . '" title="' . sprintf( __( "View all posts in %s" ), $tag->name ) . '" ' . '>' . $tag->name.'</a><p> ';
      }
    }
    wp_reset_query();  // Restore global post data stomped by the_post().
    ?>
  4. Dinho78
    Member
    Posted 2 years ago #

    Thanks for your reply and code Michael.

    I've also found http://wordpress.org/extend/plugins/wp-recent-tags/ which is a very old plugin, but I took the plunge and tried it, and it still works...lol.

    Is there a way to specify dates instead of the number of posts? (I'm monitoring a twitter stream and lots of post pass by...)

  5. MichaelH
    Volunteer
    Posted 2 years ago #

    You'd need to look at the query_posts time parameters and use that with the above query.

  6. Dinho78
    Member
    Posted 2 years ago #

    Hmm...been trying all day, but I can't make it work. For some reason it only displays 4 tags (while there are 100's of tags). Can you point me in the right direction?

    On a sidenote, orderby 'count' doesn't seem to work and the tags link to a category instead of the tags itself. Your help is appreciated!

    <?php
    $week = date('W');
    $year = date('Y');
    $recent = query_posts('year=' . $year .'&w=' .$week );
    // get most popular tags for this week (limit by 25)
    $tag_array = array();
    $args=array(
      'post_type' => 'post',
      'post_status' => 'publish',
      'posts_per_page' => '$recent',
      'caller_get_posts'=> 1
      );
    $my_query = null;
    $my_query = new WP_Query($args);
    if( $my_query->have_posts() ) {
      while ($my_query->have_posts()) : $my_query->the_post();
        $tag_args=array('orderby' => 'count');
        $tags = wp_get_post_terms( $post->ID , 'post_tag', $tag_args);
        foreach($tags as $tag) {
          $tag_array[$tag->term_id] = $tag->term_id;
        }
      endwhile;
    }
    if ($tag_array) {
      echo 'most popular this week';
      foreach($tag_array as $post_tag) {
        $tag = get_term_by('ID',$post_tag, 'post_tag');
    echo '<ul><li>';
    echo '<a href="' . esc_attr(get_term_link($tag, 'category')) . '" title="' . sprintf( __( "View all posts in %s" ), $tag->name ) . '" ' . '>' . $tag->name.'</a> ';
    echo '</li></ul>';
      }
    }
    wp_reset_query();  // Restore global post data stomped by the_post().
    ?>
  7. MichaelH
    Volunteer
    Posted 2 years ago #

    Maybe forget that and just use this for your loop (from the code above) for counting post tags in last 35 days

    $mylimit=35 * 86400; // 35 days * seconds per day
      while ($my_query->have_posts()) : $my_query->the_post();
        $post_age = date('U') - mysql2date('U', $post->post_date_gmt);
        if ($post_age < $mylimit) {
          $tag_args=array('orderby' => 'none');
          $tags = wp_get_post_terms( $post->ID , 'post_tag', $tag_args);
          foreach($tags as $tag) {
            $tag_array[$tag->term_id] = $tag->term_id;
          }
        }
      endwhile;
  8. Dinho78
    Member
    Posted 2 years ago #

    Oke, I think I'm getting closer...
    Now I have

    <?php
    // get 20 latest posts, display the tags used on those posts
    $tag_array = array();
    $args=array(
      'post_type' => 'post',
      'post_status' => 'publish',
      'posts_per_page' => -1,
      'caller_get_posts'=> 1
      );
    
      $my_query = null;
    $my_query = new WP_Query($args);
      $mylimit=1 * 14400; // 35 days * seconds per day - modified this to last 4 hours
      while ($my_query->have_posts()) : $my_query->the_post();
        $post_age = date('U') - mysql2date('U', $post->post_date_gmt);
        if ($post_age < $mylimit) {
          $tag_args=array('orderby' => 'count');
          $tags = wp_get_post_terms( $post->ID , 'post_tag', $tag_args);
          foreach($tags as $tag) {
            $tag_array[$tag->term_id] = $tag->term_id;
          }
        }
      endwhile;
    if ($tag_array) {
      echo 'most popular tags of the last hours';
      foreach($tag_array as $post_tag) {
        $tag = get_term_by('ID',$post_tag, 'post_tag');
    echo '<ul><li>';
    echo '<a href="' . esc_attr(get_term_link($tag, 'category')) . '" title="' . sprintf( __( "View all posts in %s" ), $tag->name ) . '" ' . '>' . $tag->name.'</a> ';
    echo '</li></ul>';
      }
    }
    wp_reset_query();  // Restore global post data stomped by the_post().
    ?>

    However it itways seems to display by most recent as opposed to by most (count). And would it be possible the display the countnumber as well? And lastly, I can't seem to modify the taglink, it links to a category (that doesn't exist). To summarize ; what I'm trying to achieve is something like this:

    Most popular tags of today
    - Obama (18 mentions)
    - New York (15 mentions)
    - Iron Man (11 mentions)
    - Robin Hood (7 mentions)
    - MichaelH (5 mentions)

    Sorry to bother you this much.

  9. MichaelH
    Volunteer
    Posted 2 years ago #

    This line

    echo '<a href="' . esc_attr(get_term_link($tag, 'category')) . '" title="' . sprintf( __( "View all posts in %s" ), $tag->name ) . '" ' . '>' . $tag->name.'</a> ';

    should be

    echo '<a href="' . esc_attr(get_term_link($tag, 'post_tag')) . '" title="' . sprintf( __( "View all posts in %s" ), $tag->name ) . '" ' . '>' . $tag->name.'</a> ';

    `

  10. Dinho78
    Member
    Posted 2 years ago #

    Thanks Michael, that worked beautifully. Any suggestions for my other questions?

    However it itways seems to display by most recent as opposed to by most (count). And would it be possible the display the countnumber as well? To summarize ; what I'm trying to achieve is something like this:

    Most popular tags of today
    - Obama (18 mentions)
    - New York (15 mentions)
    - Iron Man (11 mentions)
    - Robin Hood (7 mentions)
    - MichaelH (5 mentions)

  11. MichaelH
    Volunteer
    Posted 2 years ago #

    I believe the count is in $tag->count but do you mean a count of the total posts in that tag, or just a count of the 'most recent posts'. If it's just the most recent posts you will need to store that count yourself.

    If you want a terms list sorted by count (all posts, not just the recent posts) then you will want to look at using Function_Reference/get_terms. But will leave that for you or someone else to code ;)

  12. Dinho78
    Member
    Posted 2 years ago #

    I indeed meant the number of times a tag has been mentioned in recent posts. Kind of like the 'trending topics' on Twitter.

    I now have your code which gives tags for recent posts, but I can't sort it by count. I found an old code to display the most popular tags in a dropdown by count, where I can't filter it to the most recent posts and lastly I have the mod recent tags (http://wordpress.org/extend/plugins/wp-recent-tags/) which does best what I want, but it stopped working after a day, which isn't weird considering it was written for an old version of WordPress.

    I just can't believe no one has a need for a 'most popular tags of the day/week/month' thingie.

  13. Dinho78
    Member
    Posted 2 years ago #

    Giving this another shot. Since I just found out WordPress.com uses the plugin I need,

    http://en.wordpress.com/tags/ -> "This is a peek into what people on WordPress.com are talking about this very instant. It only includes recent activity, so it should change quite a bit over time. Click on any word to see the most recent posts under each tag or category."

    Anyone knows of something like for a non - hosted WordPress??

  14. joshuap
    Member
    Posted 1 year ago #

    I just wrote this to display a tag cloud of all tags used within a certain date range of posts. It seems to be working correctly but I'm afraid it may be a resource hog - can you guys test it out and verify that the query is constructed correctly? Is there a way to do it better?

    <?php
    // Set up the query
    $now = gmdate("Y-m-d H:i:s",time());
    $datelimit = gmdate("Y-m-d H:i:s",gmmktime(date("H"), date("i"), date("s"), date("m")-1,date("d"),date("Y")));
    $popterms = "SELECT $wpdb->terms.*, COUNT($wpdb->terms.term_id) as count FROM $wpdb->posts, $wpdb->term_relationships, $wpdb->term_taxonomy, $wpdb->terms WHERE $wpdb->posts.ID=$wpdb->term_relationships.object_id AND $wpdb->term_taxonomy.term_taxonomy_id=$wpdb->term_relationships.term_taxonomy_id AND $wpdb->term_taxonomy.term_id=$wpdb->terms.term_id AND post_status = 'publish' AND post_date < '$now' AND post_date > '$datelimit' AND $wpdb->term_taxonomy.taxonomy='post_tag' GROUP BY $wpdb->terms.term_id ORDER BY post_date DESC";
    $terms = $wpdb->get_results($popterms);
    if($terms){
    
    	// Arguments for wp_generate_tag_cloud
    	// See wp_tag_cloud (line 560): http://core.trac.wordpress.org/browser/trunk/wp-includes/category-template.php
    	$args = array(
    		'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
    		'format' => 'flat', 'separator' => "\n", 'orderby' => 'name', 'order' => 'ASC',
    		'exclude' => '', 'include' => '', 'link' => 'view', 'taxonomy' => 'post_tag', 'echo' => true
    	);
    
    	// Create links
    	foreach ( $terms as $key => $tag ) {
    		if ( 'edit' == $args['link'] )
    			$link = get_edit_tag_link( $tag->term_id, $args['taxonomy'] );
    		else
    			$link = get_term_link( intval($tag->term_id), $args['taxonomy'] );
    		if ( is_wp_error( $link ) )
    			return false;
    
    		$terms[ $key ]->link = $link;
    		$terms[ $key ]->id = $tag->term_id;
    	}
    
    	// Generate cloud
    	echo wp_generate_tag_cloud( $terms, $args );
    
    }
    ?>

Topic Closed

This topic has been closed to new replies.

About this Topic

Tags