logo

$4
Displaying most discussed (commented) posts within past 7 days

I have a simple question. A really simple question to be honest but I can't figure it out, no matter how often I go to wordpress.org and read up on their docs.

All I want is to display the most commented posts within the past week (i.e. Mon-Sun) or the past 7 days (whichever is easier).

I tried doing this already with a query within the loop but for some reason it's showing the most commented posts of all time even though I added some parameters to the query to specify the range of posts that I wanted to have covered.

Can someone take a look at the code below and tell me what to change?




<ul>

<?php

$week = date('W');
$year = date('Y');

$popular = new WP_Query('orderby=comment_count&posts_per_page=5&w=$week&year=$year'); ?>

<?php while ($popular->have_posts()) : $popular->the_post(); ?>


<li>

<?php $justanimage = get_post_meta($post->ID, 'image', true);
if ($justanimage) {
?>
<img align="left" src="<?php bloginfo('template_directory'); ?>/scripts/timthumb.php?src=<?php echo get_post_meta($post->ID, "image", true); ?>&amp;w=75&amp;h=63&amp;zc=1" alt="<?php the_title(); ?>" />

<?php } else { ?>

<img align="left" src="<?php bloginfo('template_directory'); ?>/images/no-thumb.png" width="75px" height="63px" alt="<?php the_title(); ?>" />

<?php } ?>

<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
</li>
<?php endwhile; ?>



</ul>





Thanks,

Brennen

Brennen Jones | 05/06/10 at 10:10am | Edit


(4) Possible Answers Submitted...

  • avatar
    Last edited:
    05/06/10
    10:44am
    Oleg Butuzov says:

    something like this =)


    <?php
    global $wpdb;
    $mostCommented = $wpdb->get_results("SELECT ID, post_title
    FROM ".$wpdb->posts." WHERE
    `post_status` = 'publish'
    AND `post_type` = 'post'
    AND `post_date` >= (SELECT date_SUB(MAX(post_date), interval 8 DAY)
    FROM ".$wpdb->posts." WHERE `post_status` = 'publish' AND `post_type` = 'post'
    )
    ORDER BY comment_count DESC
    LIMIT 5");
    ?>
    <ul>
    <?php foreach($mostCommented as $item){ ?>
    <li>
    <?php if (get_post_meta($item->ID, 'image', true)) { ?>
    <img align="left" src="<?php bloginfo('template_directory');
    ?>/scripts/timthumb.php?src=<?php echo get_post_meta($post->ID, "image", true);
    ?>&amp;w=75&amp;h=63&amp;zc=1" alt="<?php echo apply_filters('the_title', $item->post_title); ?>" />
    <?php } else { ?>
    <img align="left" src="<?php bloginfo('template_directory');
    ?>/images/no-thumb.png" width="75px" height="63px" alt="<?php
    echo apply_filters('the_title', $item->post_title); ?>" />
    <?php } ?>
    <h2><a href="<?php echo get_permalink( $item->ID ); ?>">
    <?php echo apply_filters('the_title', $item->post_title); ?>
    </a></h2>
    </li>
    <?php } ?>
    </ul>


    simple and fast

    Previous versions of this answer: 05/06/10 at 10:38am | 05/06/10 at 10:41am | 05/06/10 at 10:44am

  • avatar
    Last edited:
    05/06/10
    10:23am
    Utkarsh Kukreti says:

    Use

    $popular = new WP_Query("orderby=comment_count&posts_per_page=5&w=$week&year=$year");

    Variables aren't parsed when in single quotes.

    • 05/06/10 11:18am

      Brennen Jones says:

      Thanks for that. I didn't see your message until it was too late. I was responded to the messages through my email and got to yours after I got to the answer I chose. Sorry. :-(

      But ur solution was the simplest of them all. I knew it was a simple question, lol.

  • avatar
    Last edited:
    05/06/10
    11:02am
    Erez S says:

    Replace:

    $popular = new WP_Query('orderby=comment_count&posts_per_page=5&w=$week&year=$year'); ?>

    With:
    $popular = new WP_Query('orderby=comment_count&posts_per_page=5&w='.$week.'&year='.$year.''); ?>

    Enjoy

    • 05/06/10 10:25am

      Erez S says:

      Or you can use this for the last 7 days:

      //based on Austin Matzko's code from wp-hackers email list
      function filter_where($where = '') {
      //posts in the last 30 days
      $where .= " AND post_date > '" . date('Y-m-d', strtotime('-7 days')) . "'";
      return $where;
      }
      add_filter('posts_where', 'filter_where');
      query_posts($query_string);

  • avatar
    Last edited:
    05/06/10
    10:55am
    Ipstenu says:

    In theory, this plugin should be able to do the heavy lifting for you:

    http://wordpress.org/extend/plugins/popularity-contest

    You set it up so you only use comment weight, and then use the above code to parse for the last 7 days.

This question has expired.





Current status of this question: Completed