6

The plugin Most Popular Posts doesn't support WPML and therefore I have tried creating my own.

I have found this tutorial in creating your own code for showing the most popular posts on my site: How to Display Popular Posts by Views in WordPress without a Plugin

However this doesn't take in the factor of per week. I would like it to be pointed in the right direction on how to do this.

This code updates the posts actual view-count:

function wpb_set_post_views($postID) {
    $count_key = 'wpb_post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
    }else{
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}
//To keep the count accurate, lets get rid of prefetching
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);

Add these fields to the post:

week_count: integer
current_week: datetime

Check if current_week matches the actual current week, otherwise reset the week_count and add 1 and set the current_week to the actual current week.

Is there another way of doing this in a smarter and more effiecient way?

  • You can use WP_Query to get posts from database but how do you want to limit time period. 1. You can get last 7 days posts or 2. posts from current week. ?? – Robert hue Nov 21 '14 at 10:39
  • Are your sure that "Most popular posts" does not support WPML????? i.imgur.com/rUG6pRa.jpg – cybmeta Nov 21 '14 at 10:45
  • @cybmeta - Yeah, Im sure, -> wordpress.org/support/topic/… – Philip Nov 21 '14 at 12:08
  • @Roberthue - No not posts from current week, I want to have the most viewed post from current week. – Philip Nov 21 '14 at 12:11
  • @Philip Has this quesiton been resolved? – Ethan Jinks O'Sullivan Sep 1 '16 at 12:20
2

Okay, so here is the complete query for displaying popular posts of current week. I am using meta_query to limit query results within current week only.

It will get all posts from current week and then sort them by post views count added by custom field wpb_post_views_count that you used in your question.

// Current week's popular posts

$query_args = array(
    'post_type' => 'post',
    'date_query' => array(
        array(
            'year' => date( 'Y' ),
            'week' => date( 'W' ),
        ),
    ),
    'meta_key' => 'wpb_post_views_count',
    'orderby' => 'meta_value_num',
    'ignore_sticky_posts' => 1,
    'posts_per_page' => '-1',
);

$my_query = new WP_Query( $query_args );

if ( $my_query->have_posts() ) :
    while ( $my_query->have_posts() ) : $my_query->the_post();

        // add your loop content here.

    endwhile;
endif;

wp_reset_postdata();

protected by Community Nov 1 '18 at 11:45

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.