如何在没有插件的WordPress中显示热门帖子

在过去,我们已经向您展示了如何使用插件在WordPress中创建一个受欢迎的帖子tabber。 这个插件对于标签者来说非常棒。 不过,我们希望在我们的布局中进行更多的自定义,所以我们决定不使用插件。 在本文中,我们将向您展示如何在不使用任何插件的情况下,通过WordPress中的视图跟踪和显示热门帖子。

下面的屏幕截图显示了我们自定义流行的帖子显示的一个示例:

热门帖子例子

首先我们需要做的是创建一个函数来检测帖子数量并将其作为每个帖子的自定义字段进行存储。 为此,请将以下代码粘贴到主题的functions.php文件中,或者更好地粘贴到特定于站点的插件中:

函数wpb_set_post_views($ postID){
     $ count_key ='wpb_post_views_count';
     $ count = get_post_meta($ postID,$ count_key,true);
     如果($计数== ''){
         $ count = 0;
         delete_post_meta($ postID,$ count_key);
         add_post_meta($ postID,$ count_key,'0');
     }其他{
         $计数++;
         update_post_meta($ postID,$ count_key,$ count);
     }
 }
 //为了保持计数的准确性,让我们摆脱预取
 remove_action('wp_head','adjacent_posts_rel_link_wp_head',10,0); 

现在你已经有了这个功能,我们需要在单个页面上调用这个函数。 这样,函数就可以准确地知道哪个帖子获得了视图的功劳。 为此,您需要将以下代码粘贴到单个后循环中:

wpb_set_post_views(get_the_ID()); 

如果您使用的是儿童主题,或者您只想简化自己的操作,那么只需使用wp_head钩子将跟踪器添加到标题中即可。 因此,请将以下代码粘贴到主题的functions.php文件或特定于站点的插件中:

函数wpb_track_post_views($ post_id){
     if(!is_single())return;
     if(empty($ post_id)){
         全球$ post;
         $ post_id = $ post-> ID;
     }
     wpb_set_post_views($ POST_ID);
 }
 add_action('wp_head','wpb_track_post_views'); 

一旦你把这个,每次用户访问的帖子,自定义字段将被更新。

注意:如果您使用的是缓存插件,则默认情况下,此技术不起作用。 我们正在使用W3 Total Cache,它具有称为碎片缓存的功能。 你可以使用它来完成这项工作。 以下是需要改变的地方:


现在,你可以做各种很酷的东西,如显示帖子查看次数,或按查看次数排序帖子。 让我们看看如何做一些这些很酷的事情。

如果您想在单个帖子页面上显示帖子查看次数(通常在评论数量旁边)。 那么你需要做的第一件事就是在你的主题的functions.php文件或特定于站点的插件中添加以下内容。

函数wpb_get_post_views($ postID){
     $ count_key ='wpb_post_views_count';
     $ count = get_post_meta($ postID,$ count_key,true);
     如果($计数== ''){
         delete_post_meta($ postID,$ count_key);
         add_post_meta($ postID,$ count_key,'0');
         返回“0查看”;
     }
     返回$ count。“ 意见;
 } 

然后在你的后循环中添加下面的代码:

wpb_get_post_views(get_the_ID()); 

如果您想按查看次数对帖子进行排序,那么可以使用wp_query post_meta参数轻松完成。 最基本的示例循环查询将如下所示:

4,'meta_key'=>'wpb_post_views_count','orderby'=>'meta_value_num','order'=>'DESC'));
 while($ popularpost-> have_posts()):$ popularpost-> the_post();

 标题();

 ENDWHILE;
 ?> 

要添加其他WP_Query参数(如时间范围),请参阅Codex上的WP_Query页面。

我们希望你喜欢这个帖子。