Creating a list of most popular posts of the past week - Wordpress

Posted by Gary Woods on Stack Overflow See other posts from Stack Overflow or by Gary Woods
Published on 2012-12-11T15:59:53Z Indexed on 2012/12/11 17:03 UTC
Read the original article Hit count: 336

Filed under:
|
|
|

I have created a widget for my Wordpress platform that displays the most popular posts of the week. However, there is an issue with it. It counts the most popular posts from Monday, not the past 7 days. For instance, this means that on Tuesday, it will only include posts from Tuesday and Monday.

Here is my widget code:

<?php class PopularWidget extends WP_Widget
{
    function PopularWidget(){
        $widget_ops = array('description' => 'Displays Popular Posts');
        $control_ops = array('width' => 400, 'height' => 300);
        parent::WP_Widget(false,$name='ET Popular Widget',$widget_ops,$control_ops);
    }

  /* Displays the Widget in the front-end */
    function widget($args, $instance){
        extract($args);
        $title = apply_filters('widget_title', empty($instance['title']) ? 'Popular This Week' : $instance['title']);
        $postsNum = empty($instance['postsNum']) ? '' : $instance['postsNum'];
        $show_thisweek = isset($instance['thisweek']) ? (bool) $instance['thisweek'] : false;

        echo $before_widget;

        if ( $title )
        echo $before_title . $title . $after_title;

?>
<?php
    $additional_query = $show_thisweek ? '&year=' . date('Y') . '&w=' . date('W') : '';

    query_posts( 'post_type=post&posts_per_page='.$postsNum.'&orderby=comment_count&order=DESC' . $additional_query ); ?>
        <div class="widget-aligned">
        <h3 class="box-title">Popular Articles</h3>
        <div class="blog-entry">
            <ol>
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
            <li><h4 class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4></li>
    <?php endwhile; endif; wp_reset_query(); ?>
            </ol>
        </div>
        </div> <!-- end widget-aligned -->
        <div style="clear:both;"></div>
<?php
        echo $after_widget;
    }

  /*Saves the settings. */
    function update($new_instance, $old_instance){
        $instance = $old_instance;
        $instance['title'] = stripslashes($new_instance['title']);
        $instance['postsNum'] = stripslashes($new_instance['postsNum']);
        $instance['thisweek'] = 0;
        if ( isset($new_instance['thisweek']) ) $instance['thisweek'] = 1;

        return $instance;
    }

  /*Creates the form for the widget in the back-end. */
    function form($instance){
        //Defaults
        $instance = wp_parse_args( (array) $instance, array('title'=>'Popular Posts', 'postsNum'=>'','thisweek'=>false) );

        $title = htmlspecialchars($instance['title']);
        $postsNum = htmlspecialchars($instance['postsNum']);


        # Title
        echo '<p><label for="' . $this->get_field_id('title') . '">' . 'Title:' . '</label><input class="widefat" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . $title . '" /></p>';
        # Number of posts
        echo '<p><label for="' . $this->get_field_id('postsNum') . '">' . 'Number of posts:' . '</label><input class="widefat" id="' . $this->get_field_id('postsNum') . '" name="' . $this->get_field_name('postsNum') . '" type="text" value="' . $postsNum . '" /></p>';  ?>
        <input class="checkbox" type="checkbox" <?php checked($instance['thisweek'], 1) ?> id="<?php echo $this->get_field_id('thisweek'); ?>" name="<?php echo $this->get_field_name('thisweek'); ?>" />
        <label for="<?php echo $this->get_field_id('thisweek'); ?>"><?php esc_html_e('Popular this week','Aggregate'); ?></label>
        <?php
    }

}// end AboutMeWidget class

function PopularWidgetInit() {
  register_widget('PopularWidget');
}

add_action('widgets_init', 'PopularWidgetInit');

?>

How can I change this script so that it will count the past 7 days rather than posts from last Monday?

© Stack Overflow or respective owner

Related posts about php

Related posts about Wordpress