显示本周最受欢迎的帖子

时间:2017-06-26 作者:user7548188

我正在尝试显示上周最受欢迎的帖子。然而,我认为它工作不正常,显示了最受欢迎(浏览量最大)的帖子。我知道我的代码是有效的,因为我可以使用monthnum“=>$month查看上个月最受欢迎的帖子。如何修复此问题以显示上周最受欢迎的帖子?

<?php 
$week = date(\'W\'); 
$year = date(\'Y\'); 
$new_query = new WP_Query( array(\'posts_per_page\' => 1, \'cat\' => 14, \'meta_key\' => \'wpb_post_views_count\', \'orderby\' => \'meta_value_num\', \'order\' => \'DESC\',\'weeknummer\'=>$week,\'year\'=>$year )); 
?> 
<?php if ( $new_query->have_posts() ) : ?> 
<?php while ( $new_query->have_posts() ) : $new_query->the_post(); ?> 
<?php the_title(); ?>
<?php endwhile; wp_reset_postdata(); ?> 
<?php else : ?> 
<?php endif; ?> 
// Popular Posts
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);

function wpb_track_post_views ($post_id) { 
if ( !is_single() ) return; 
if ( empty ( $post_id) ) { 
global $post; 
$post_id = $post->ID; 
} 
wpb_set_post_views($post_id); 
} 
add_action( \'wp_head\', \'wpb_track_post_views\');

1 个回复
SO网友:Mark Kaplun

这不是一段时间内收集视图统计信息的方式。正确的方法是使用某种滑动窗口,帮助您计算特定时间范围内的视图。例如,要获得最受欢迎的“今日”帖子,您将计数存储在选项中,并每24小时将选项归零。对于上周最流行的,您可以每天使用一个选项,在到期时删除“最旧”的选项,然后每天重新计算过去7天最流行的选项。

您的代码现在实际做的是显示上个月发布的最受欢迎的帖子,这不太可能是您想要的。

旁注:在前端请求时向DB写信是一种很好的方法,可以让站点宕机(在小型站点上你不会注意到它,但一旦你开始拥有一些良好的流量…繁荣)。。。。很明显,您的方法不能与页面缓存一起使用。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post