在 WordPress 中默认情况下是无法实现热门文章的,目前比较通用的实现热门文章有两种办法:一是实现使用 wp-postviews 插件的方式实现,但是这种方式在使用了缓存插件会失效。二是采用伪热门方法,什么是伪热门,就是不是通过靠点击数来实现,而是通过评论数来实现。显然这不是真正的热门文章列表。我们要通过点击数来提取热门文章列表。下面我们采用非插件非评论的方式来实现热门文章列表。
一、首先我们需要创建一个函数来记录文章浏览次数并以一个自定义字段保存起来。粘贴下面的代码到 functions.php 内:
<pre>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); } } //为了确保计数的精准度,剔除头部产生的预备代码 remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);</pre>
接下来我们要做的是让每篇文章知道你在计数,所以我们需要把下面的代码粘贴进文章循环中:
<pre>wpb_set_post_views(get_the_ID());</pre>
如果你在使用子主题或明了一点,那么需要使用 wp_head hook 在头部添加 tracker 。为了做到这点,需要把下面的代码添加到 functions.php 中:
<pre>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 就会失效, 这个缓存插件采用的是局部缓存的技术,因此可以通过修改下面代码来其左右:
<pre><!-- mfunc wpb_set_post_views($post_id); --><!-- /mfunc -->
现在较酷的事情就是可以按浏览次数进行排序了,也可以显示浏览次数:
二、显示浏览次数
把下面的代码粘贴到 functions.php 文件中:
<pre>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 次"; } return $count.' 次'; }
然后把下面的代码粘贴到 single.php 文件需要显示的地方:
<pre>wpb_get_post_views(get_the_ID());
三、按浏览次数显示热门文章,可以采用下面的代码:
<pre><?php $popularpost = new WP_Query( array( 'posts_per_page' => 4, 'meta_key' => 'wpb_post_views_count', 'orderby' => 'wpb_post_views_count', 'order' => 'DESC' ) ); while ( $popularpost->have_posts() ) : $popularpost->the_post(); the_title(); endwhile; ?>