Ask your WordPress questions! Pay money and get answers fast! Comodo Trusted Site Seal
Official PayPal Seal

Displaying most discussed (commented) posts within past 7 days WordPress

  • SOLVED

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

Answers (4)

2010-05-06

Erez S answers:

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


Erez S comments:

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

2010-05-06

Oleg Butuzov answers:

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

2010-05-06

Utkarsh Kukreti answers:

Use
$popular = new WP_Query("orderby=comment_count&posts_per_page=5&w=$week&year=$year");
Variables aren't parsed when in single quotes.


Brennen Jones comments:

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.

2010-05-06

Ipstenu answers:

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.