WordPress 开启 CDN 静态缓存页面之后,当访问文章的时候,便不会去请求源站,而是返回 CDN 缓存了的页面,所以统计文章的浏览数量不会进行自增以及其他的变化。

想要解决这个问题,可以通过 Ajax 来异步请求服务器,然后再进行文章的浏览数量自增或其他的操作。

重要提醒:

本方法仅适用于使用了 WP-PostViews 插件或者与 WP-PostViews 相同字段的博客。若你的文章统计字段不同,可自行修改下方 SQL 语句以达到效果。

解决方案

首先,在 WordPress 的根目录新建一个 PHP 文件,命名为 views.php,然后将以下代码写进该文件:

<?php require('wp-blog-header.php'); ?>
<?php
  $ajaxHead =  $_SERVER['HTTP_X_REQUESTED_WITH'];
  if (strtoupper($ajaxHead) == strtoupper("XMLHttpRequest")) {
    $post_id = $_POST['post_id'];
    echo $post_id;
    $sql = "update wp_postmeta set meta_value = meta_value + 1 where post_id = '${post_id}' AND meta_key = 'views';";
    $wpdb->query($sql);
  } else {
    header("HTTP/2 404 Not Found");
    header("Status: 404 Not Found");
    exit;
  }
?>

在上述代码中,为了防止恶意请求,做了一个 Ajax 请求头的验证,验证是否为 XMLHttpRequest 请求。如果不是,则返回 404 状态。

接下来,在主题的 page.php 文件插入以下 JS 代码:

<script>
  $(function() {
    $.post("/views.php", { post_id: <?php the_ID(); ?> }, function() {});
  });
</script>

这样就可以完美解决 WordPress 开启 CDN 缓存之后文章浏览量无法增加的问题了。

如果觉得我的文章对你有用,请随意赞赏