WordPress不用插件实现文章阅读计数及热门文章
文 / @UTHEME
作为WordPress使用者,能不使用插件就尽量不安装插件,作为WordPress主题制作者,就更不应该让主题依赖插件了。文章阅读计数和热门文章列表是常见的需求,实现起来其实也并不复杂。
设置文章阅读数量函数:
function bzg_set_post_views() { global $post; if( ! isset( $post->ID ) || ! is_singular() ) return; $cookie_name = 'views_' . $post->ID; if( isset( $_COOKIE[$cookie_name] ) ) return; $post_views = (int) get_post_meta( $post->ID, 'views', true ); if( empty( $post_views ) ) { $post_views = 1; } else { $post_views = $post_views + 1; } update_post_meta( $post->ID, 'views', $post_views ); setcookie( $cookie_name, 'yes', ( current_time( 'timestamp' ) + 86400 ) ); } add_action( 'get_header', 'bzg_set_post_views' );
代码中86400是指同一浏览器访问24小时内不计数,这样就能一定程度上避免刷阅读数。
读取文章阅读数量函数:
function bzg_post_views($post_ID = '') { global $post; $post_id = $post_ID; if( ! $post_id ) $post_id = $post->ID; if( ! $post_id ) return; $post_views = (int) get_post_meta( $post_id, 'views', true ); if( empty( $post_views ) ) $post_views = 0; return $post_views; }
以上代码放到主题文件functions.php中,在需要显示文章阅读数的地方调用:
<?php echo bzg_post_views(); ?>
获取阅读数最多的文章:
function bzg_get_most_viewed( $limit = 10 ) { $args = array( 'posts_per_page' => $limit, 'order' => 'DESC', 'post_status' => 'publish', 'orderby' => 'meta_value_num', 'meta_key' => 'views', 'date_query' => array( array( 'after' => '-360day', ) ), ); $str = implode('&', $args); $postlist = wp_cache_get('hot_post_' . md5($str), 'tiezhushuo'); if(false === $postlist) { $postlist = get_posts( $args ); wp_cache_set('hot_post_' . md5($str), $postlist, 'tiezhushuo', 86400); } foreach ( $postlist as $post ) { echo '<li><a href="' . get_permalink($post->ID) . '" rel="bookmark">' . $post->post_title . '</a></li>'; } wp_reset_postdata(); }
注意函数中的-360day,是指输出360天内的文章,函数调用方法:
<ul> <?php bzg_get_most_viewed(8); ?> </ul>

相关文章
-
WordPress插件:All in One WP Security & Firewall 怎么样(附:AIOWPS拦截垃圾评论设置教程) 2023-01-26 21:51:51
-
在 PHP 中如何通过一行代码就交换两个变量的值 2023-01-26 00:18:31
-
WordPress主题:Pin Premium (WordPress仿Pinterest样式瀑布流主题) 2023-01-25 23:36:43
-
免费WordPress主题:Maupassant(WordPress中文博客主题) 2023-01-25 23:31:29
-
WordPress响应式图片(Responsive Image)功能关闭:取消WordPress图片宽带和高度参数 2023-01-24 10:49:32
-
wordpress报错:修复MySQL 1064错误问题 错误原因和解决方法 2023-01-24 10:42:04
-
WP Rocket – 强大的WordPress缓存加速优化插件(附:WP Rocket插件设置过程与七折优惠码) 2023-01-24 00:41:44
-
WordPress 实现静态化搜索结果页面的方法 2023-01-24 00:41:44
-
get_permalink、get_the_permalink和the_permalink有啥区别? 2023-01-24 00:41:08
-
为什么选用WordPress搭建独立站? 2023-01-23 20:25:21