WordPress文章浏览统计:防止重复刷新增加

3 下载量 76 浏览量 更新于2024-08-31 收藏 69KB PDF 举报
"wordpress进阶教程,文章浏览量统计,避免重复刷新增加计数,通过cookie和post_meta实现" 在WordPress中实现文章浏览量统计并防止重复刷新增加计数是一种常见的需求,这有助于提供更准确的访问数据。在提供的教程中,工作室分享了一个简单的方法来实现这一功能。以下是对教程内容的详细解释: 首先,我们需要在当前使用的主题的`functions.php`文件中添加一段代码。这段代码定义了一个名为`process_postviews`的函数,该函数主要用于处理文章的浏览计数。 ```php function process_postviews() { global $user_ID, $post; // 如果用户已设置cookie,表示已经计数,不再重复计数 if (check_cookie($post)) { return; } // 检查是否为有效的文章ID if (is_int($post)) { $post = get_post($post); } // 排除修订版本,只计算原始文章 if (!wp_is_post_revision($post)) { // 只在单篇文章或页面视图时才计数 if (is_single() || is_page()) { $id = intval($post->ID); // 获取或设置文章的浏览次数元数据 $post_views = get_post_meta($id, '_check_count', true); // 这里可以添加更多的逻辑来决定是否应该计数,例如排除机器人 $should_count = true; // 更多的条件判断可以在此处添加,例如检查用户代理以排除搜索引擎爬虫 $useragent = $_SERVER['HTTP_USER_AGENT']; // 示例:排除GoogleBot if (strpos($useragent, 'GoogleBot') !== false) { $should_count = false; } // 如果应计数并且没有设置cookie,则增加计数 if ($should_count && !$post_views) { // 设置cookie表示已计数 setcookie("viewed_post_$id", time(), time() + 60 * 60 * 24, '/'); update_post_meta($id, '_check_count', 1); } elseif ($should_count) { // 如果已计数,增加计数 update_post_meta($id, '_check_count', $post_views + 1); } } } } ``` 这段代码的核心思路是利用cookie来跟踪用户是否已阅读过文章。当用户首次访问文章时,如果没有检测到对应的cookie,那么将设置一个cookie,并更新文章的浏览次数。如果用户再次刷新页面,由于cookie已经存在,`check_cookie`函数会返回true,从而跳过计数过程。这样就实现了避免因重复刷新而增加浏览次数的功能。 此外,代码还考虑了排除搜索引擎爬虫的可能性,通过检查`$_SERVER['HTTP_USER_AGENT']`来识别常见的爬虫。你可以根据需要扩展这部分代码,添加更多爬虫的标识字符串来进一步优化。 请注意,此方法依赖于WordPress的`get_post_meta`和`update_post_meta`函数来读取和更新文章的元数据,其中`_check_count`是自定义的元键,用于存储文章的浏览次数。此外,`setcookie`用于设置cookie,确保在一定时间内(例如24小时)不会重复计数。 这个方法虽然简单,但可能不适用于所有场景,例如对于多个设备、浏览器或者清除了cookies的用户,可能仍会导致计数重复。如果你需要更精确的统计,可能需要考虑使用更复杂的方法,如使用服务器端session、数据库存储或第三方统计服务。