You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress post_views_count返回0及2022年文章查询异常问题

WordPress post_views_count 异常问题排查与解决

核心问题分析

你遇到的问题本质是两个关键疏漏:

  1. post_views_count 不是WordPress原生字段,必须通过自定义代码实现浏览量统计与元字段更新——没有统计逻辑的话,该字段要么不存在,要么数值一直为0。
  2. 当前查询逻辑仅返回包含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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 04:43:21