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?
1
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();