如何在没有插件的情况下通过WordPress中的视图显示热门帖子
在过去,我们向您展示了如何使用插件在WordPress中创建流行的帖子tabber。这个插件非常适合标签。但是,我们希望在布局中进行更多自定义,因此我们决定在没有插件的情况下进行自定义。在本文中,我们将向您展示如何在不使用任何插件的情况下通过WordPress中的视图跟踪和显示热门帖子。
我们需要做的第一件事是创建一个函数来检测帖子视图计数并将其存储为每个帖子的自定义字段。为此,请将以下代码粘贴到主题的functions.php文件中,或者更好地粘贴在特定于站点的插件中:
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);
现在您已经有了这个功能,我们需要在单个帖子页面上调用此函数。通过这种方式,函数可以准确地知道哪个帖子获得了视图的功劳。为此,您需要在单个post循环中粘贴以下代码:
wpb_set_post_views(get_the_ID());
如果您正在使用子主题,或者您只是想让自己变得简单,那么您只需使用wp_head hook在标题中添加跟踪器即可。因此,请将以下代码粘贴到主题的functions.php文件或特定于站点的插件中:
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");
注意:如果您使用的是缓存插件,默认情况下此方法不起作用。我们正在使用W3 Total Cache,它具有称为Fragmented Caching的功能。您可以使用它来使这项工作正常。以下是需要更改的内容:
<!-- mfunc wpb_set_post_views($post_id); --><!-- /mfunc -->
现在,您可以执行各种很酷的操作,例如显示发布视图计数,或按视图计数对帖子进行排序。让我们来看看如何做一些这些很酷的事情。
如果要在单个帖子页面上显示帖子视图计数(通常在评论计数或其他内容旁边)。然后你需要做的第一件事是在你的主题的functions.php文件或特定于站点的插件中添加以下内容。
function wpb_get_post_views($postID){ $count_key = "wpb_post_views_count"; $count = get_post_meta($postID, $count_key, true); if($count==""){ delete_post_meta($postID, $count_key); add_post_meta($postID, $count_key, "0"); return "0 View"; } return $count." Views"; }
然后在你的post循环中添加以下代码:
wpb_get_post_views(get_the_ID());
如果你想要按视图计数对帖子进行排序,那么您可以使用wp_query post_meta参数轻松完成。最基本的示例循环查询如下所示:
<?php $popularpost = new WP_Query( array( "posts_per_page" => 4, "meta_key" => "wpb_post_views_count", "orderby" => "meta_value_num", "order" => "DESC" ) ); while ( $popularpost->have_posts() ) : $popularpost->the_post(); the_title(); endwhile; ?>
评论被关闭。