WordPress post_views_count返回0及2022年文章查询异常问题
WordPress post_views_count 异常问题排查与解决
核心问题分析
你遇到的问题本质是两个关键疏漏:
post_views_count不是WordPress原生字段,必须通过自定义代码实现浏览量统计与元字段更新——没有统计逻辑的话,该字段要么不存在,要么数值一直为0。- 当前查询逻辑仅返回包含
post_views_count字段的文章,2022年的文章因未被统计(无该字段)直接被过滤;2021年文章显示0则说明统计逻辑未正常运行或未更新数值。
具体解决方案
1. 补全浏览量统计代码
在主题的functions.php中添加以下代码,实现基础的有效浏览量统计(排除管理员与爬虫,避免无效计数):
// 初始化或更新文章浏览量 function set_post_views($post_id) { $count_key = 'post_views_count'; $count = get_post_meta($post_id, $count_key, true); if (empty($count)) { $count = 0; delete_post_meta($post_id, $count_key); add_post_meta($post_id, $count_key, '0'); } else { $count++; update_post_meta($post_id, $count_key, $count); } } // 追踪文章浏览(仅在单页生效,排除管理员与爬虫) function track_post_views($post_id) { if (!is_single()) return; if (empty($post_id)) { global $post; $post_id = $post->ID; } // 排除管理员 if (current_user_can('edit_posts')) return; // 排除主流爬虫 $user_agent = $_SERVER['HTTP_USER_AGENT']; $crawlers = ['Googlebot', 'Bingbot', 'Slurp', 'DuckDuckBot', 'Baiduspider']; foreach ($crawlers as $crawler) { if (strpos($user_agent, $crawler) !== false) return; } set_post_views($post_id); } add_action('wp_head', 'track_post_views');
2. 修正WP_Query查询逻辑
原查询的meta_key参数会过滤掉无post_views_count字段的文章,同时日期格式可能存在解析问题,修改如下:
$args_query = array( 'post_type' => 'post', 'posts_per_page' => 12, 'orderby' => 'meta_value_num', 'order' => 'DESC', 'date_query' => array( array( 'after' => '2021-01-02', // 使用标准Y-m-d格式,避免解析错误 'inclusive' => true, // 包含2021年1月2日当天的文章 'column' => 'post_date' // 指定按发布日期筛选 ) ), // 替换原meta_key为meta_query,支持包含无浏览量字段的文章(可选) 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'post_views_count', 'compare' => 'EXISTS', 'type' => 'NUMERIC' ), array( 'key' => 'post_views_count', 'compare' => 'NOT EXISTS' ) ) );
3. 优化浏览量显示逻辑
避免因字段不存在显示空值,在获取数值时添加默认值处理:
// 替换原get_post_meta行 $views = get_post_meta(get_the_ID(), 'post_views_count', true); $views = $views ? intval($views) : 0; $output .= '<h3>' . $views . '</h3>';
4. 排查缓存影响
若网站使用缓存插件(如WP Rocket、W3 Total Cache),需确保统计代码不受缓存影响:
- 排除单页文章的缓存,或设置浏览量统计为动态内容
- 检查缓存规则是否阻止了
wp_head钩子的执行
内容的提问来源于stack exchange,提问作者Paolo Battiloro
相关产品推荐
相关产品推荐

