WordPressのカスタマイズやテーマファイル、プラグインの作り方などデータベース構造から詳しく解説します。

wp_postmetaにview数を追加する(プラグイン不使用)

今回はwp_postmetaにview数を追加し、カウントする処理を書こうと思います。
view数を追加することによって、人気記事の取得やデータが取れるようになりますので、なかなか使い勝手がいいです。

プラグインを使用したもであれば、下記のプラグインが有名でおすすめです!!
WP_Post_Views
WordPress Popular Posts

なぜ、便利なプラグインがあるにも関わらず自作するのかというとWordPress Popular Postsを使用したところ、他の処理とぶつかってエラーを引き起こしてしまったからです...!!

なので、今回は自作することに至りました。
では処理を書いていきます。

// wp_postmetaにmeta_key = 'views' を追加

// get_header関数が読み込まれた時にadd_meta_viewsをフック
add_action( 'get_header', 'add_meta_views' );

function add_meta_views() {
  global $post, $wpdb;
  // 公開状態かつ、プレビューでの確認じゃ無い時に処理を実行
  if ($post->post_status == 'publish' && is_preview() == false) {
    $post_id = $post->ID;
    if (!$post_id) { return; }
    if ($post_id <= 0) { return; }
    // view数を取得
    $views = $wpdb->get_var("
                              SELECT wp_postmeta.meta_value
                              FROM wp_postmeta
                              WHERE wp_postmeta.post_id = $post_id
                              AND wp_postmeta.meta_key = 'views'
                            ");
    // $viewsが空ならview数に1を追加し更新
    if(empty($views)) {
      $wpdb->query("
                    INSERT INTO wp_postmeta(post_id, meta_key, meta_value)
                    VALUES ($post_id, 'views', '1')
                  ");
    }
  // $viewsに数字が入っていれば1を追加
    else {
      $wpdb->query("
                    UPDATE wp_postmeta
                    SET wp_postmeta.meta_value = wp_postmeta.meta_value + 1
                    WHERE wp_postmeta.post_id = $post_id
                    AND wp_postmeta.meta_key = 'views'
                    LIMIT 1
                  ");
    }
  } else {
    return;
  }
}

こんな感じですかね。
僕の場合は、WordPress Popular Postsが途中からview数を取得してくれなくなったので、既存のwp_postmetaに含まれていたviewsも考慮してこの処理にしました!

WordPress Popular Postsのエラーがあまり良い参考がでなかったので、しぶしぶ作った感じです。
一応、今のところはこの処理で問題はでていなくて、人気記事の取得などもできているので良かったです。

データベースのUPDATEとINSERTの処理はやはり緊張しますね(笑)

関連記事

ページ上部へ戻る