先日「PHPで何かつくろう会」というPHPで何かを作る会に参加してきました。PHPはまるっきり初心者なのですが、なんとか四苦八苦しながら、作りたいものを形にすることができたので、晒してみます。
当日もくもくしていたのは、Google Analytics APIを使い、Wordpress上で人気記事ランキングを表示させるカスタマイズです。
プラグインとして記事ランキングを表示させるものあるのですが、勉強も兼ねて、自分で作ることにしました。
最終的にWP_Queryで記事をランキング表示できるようにするため、データベースにPV数を格納するところまでやっていきます。
※こちらのカスタマイズはデータベースを使います。実行する際は絶対にバックアップをとってから行ってください。不具合が起きても責任とれません。
まずはAPIを有効化
Google analytics APIを利用するために、まずはAPIを有効化する必要があります。APIを叩くためには下記の4つの情報が必要です。
- Google Analytics APIのクライアント ID
- Google Analytics APIのメールアドレス
- 秘密鍵情報
- Google AnalyticsのビューID
今回はランキング表示のためのカスタマイズをメインに書いていきたいと思います。APIの設定に関しては下記の参考記事をご覧ください。
・Google Analytics API v3をPHPから利用して人気記事ランキング作成
[PHP] Google Analytics API v3.0 を使って解析データを取得する unlinked log
PHPでAPIを叩く
上記の記事を参考に、4つの情報が手に入ったら、google-api-php-clientフォルダをサーバーにアップロードします。
wordpressで空白の固定ページ用テンプレートを新規作成し、そのテンプレートで新規記事を公開します。
そちらへ下記のコードを記述すれば、記事のURLとPV数を配列で呼び出すことが可能です。今回は過去1ヶ月間のPV数を呼び出しています。
配列を整形する
上記のコードで$resultに記事のPV数とURLの配列を格納しました。次に、データベースへPV数を格納するため、配列を整形していきます。url_to_postidを使うことで記事URLから記事IDを返すことができるので、PV数とIDを配列で返すことができます。記事ではないURL(トップページなど)は0を返すので、記事以外の値は配列から削除します。
PV数を保存するカスタムフィールドを作る
次に、PV数を保存するカスタムフィールドをすべての記事に設置します。すでにブログをスタートしてある程度記事数がたまっている場合、全ての記事にカスタムフィールドを追加するのは大変なので、下記のコードで一括で追加します。カスタムフィールドのmeta_keyはviewにしています。
wpdbクラスのget_resultsメソッドで全ての記事IDを取得し、insertメソッドでカスタムフィールドを追加しています。
今後追加していく記事に関してはfunctions.phpに下記のコードを追加することで、記事保存時に自動でカスタムフィールドを設置してくれます。
カスタムフィールドにPV数を保存する
カスタムフィールドにPV数を保存します。これはwpdbクラスのupdateメソッドを使います。ちなみに、アナリティクスで記事URLがかぶり、IDが重複してしまうことがあるので、同じIDでPV数が上書きされないようにしています。(もしかしたら、同一IDで合計するようにした方がいいかもしれませんが、面倒なのでこれでいきます。)
ランキングを表示させる
ここまでできたらいよいよ記事ランキングを表示させます。WP_Queryのパラメーターにmeta_value_numとviewを設定すれば記事をPV数順で呼び出すことができます。meta_valueではなくmeta_value_numにしないとキチンとソートされないので注意してください。
これでなんとか記事のランキングが表示できたのではないかと思います。後は、Cronでページを叩いて定期的にデータベースを上書きすれば、記事のランキングがスムーズに表示できますね。
とはいっても色々とツッコミどころ満載なコードな気もしますが、、とにかくこういったカスタマイズはWordpressの勉強になりますね。
という訳でもっと効率の良いやり方がありましたら誰か教えてください。
ではでは。