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 キャッシュを有効にした後に記事の閲覧数が増加しない問題を完全に解決できます。