yonemoto

Google Analytics APIを使ってWordPressの記事をランキング表示させる方法

ブログ機能を使ってサイトの運営などをしているとGoogle Analytics(以下GAとする)でアクセス解析をする機会がよくあると思います。

そんな時、GAに集められたデータをサイトに表示したいと思ったことはないでしょうか?
特に人気のある記事をランキング形式で表示したいなんて場面はよくありますよね。

WordPressを使用している場合であれば、「WordPress Popular Posts」といった便利なプラグインがあるので面倒な作業を省いてサクッと導入できたりします。ただ、便利で多機能なプラグインを使うとサイトが重くなってしまうといった懸念点も出てきます。そんな時に活用したいのが冒頭でも紹介したGAのデータです。幸いにもGAのAPIを利用することでアクセス情報を取得できるということなので今回人気記事のランキング表示で試してみました。(ここではWordPressを使った例で紹介していきます。)

作業手順

  1. GAのAPIから解析情報を取得
  2. URLからWordPressの投稿IDを取得
  3. 投稿IDを利用して記事情報を出力

まずはGAのAPIからアクセス情報を取得する準備から行っていきましょう。
1の手順はGAの公式リファレンスから出ているのでここでは割愛させていただきます。
はじめてのアナリティクス API: サービス アカウント向け PHP クイックスタート

早速サンプルコード(HelloAnalytics.php)を実行してみると、出た!GAビューの名前と過去7日間のセッション数が表示されました。

First view (profile) found: (GAビューの名前が出力)
Total sessions: (セッション数が出力)
/* サンプルコードの一部抜粋(デフォルトのパラメーター) */
function getResults($analytics, $profileId) {
   return $analytics->data_ga->get(
       'ga:' . $profileId,
       '7daysAgo',
       'today',
       'ga:sessions');
}

今回はGAの解析情報をランキング形式でWordPressに表示させたいのでその為に必要な情報をとってこれるようにHelloAnalytics.phpをカスタマイズしたいと思います。まずビュー数を指標としてランキング表示するならば、各記事のビュー数と記事URLをGAから取ってくるようにします。

/* GAからデータを取得 */
function getResults($analytics, $profileId)
{
    $optParams = array(
        'dimensions'=> 'ga:pagePath',
        'sort' => '-ga:pageviews',
        'max-results' => 5,
    );
    $ga_data = $analytics->data_ga->get(
        'ga:' . $profileId,
        '7daysAgo',
        'today',
        'ga:pageviews',
        $optParams
    );

    // GAのデータを整形
    if (count($ga_data->getRows()) == 0) {
        return false;
    }

    $results = [];
    foreach ($ga_data->getRows() as $row) {
        $results[] = $row;
    }
    return $results;
}

これで過去7日間でビュー数の多い記事5件のURLとビュー数を取得できました。

URLからWordPressの投稿IDを取得

次に取ってきた記事URLを元にWordPressからさらに表示させたい記事情報をもってきます。ここで記事URLからWordPressの投稿IDを逆引きするのに便利なのが「url_to_postid」という関数です。

<?php $postid = url_to_postid( ‘記事URL' ); ?>

上記のように書けば記事URLからWordPressの投稿IDを簡単に取得することができます。
Function Reference/url to postid « WordPress Codex

投稿IDを利用して記事情報を出力

この関数を使ってWordPressから記事タイトル、日付、カテゴリーといった情報を取得してみましょう。

/*  結果を表示する */
if (count($results) > 0) :
    ?>
    <ul>
        <?php foreach ($results as $row) : ?>
            <?php $post_id = url_to_postid($row[0]);
            global $post;
            $post = get_post($post_id);
            setup_postdata( $post );
            ?>
            <li>
                <?= $row[0] ?> (<?= $row[1] ?> views)
                <?php the_title(); ?>
                <?php the_date(); ?>
                <?php the_category(); ?>
            </li>
        <?php endforeach; ?>
    </ul>
<?php else : ?>
    <p>結果がありません</p>
    <?php
endif;

これまでの処理をHelloAnalytics.phpに追記修正すればランキング形式で記事情報を出力するテンプレートが完成です。あとはファイル名をranking.phpといった任意の名前に変えて表示させたい箇所に読み込ませてあげましょう。

試しに表示させてみると・・・できた!!

補足

この記事では詳しく扱っていないのですが、GAのAPIを使ってサイトに表示させる場合はAPIへのアクセスをキャッシュ化させることも検討してみましょう。なぜならキャッシュ化させないとサイトを訪問したユーザーが毎回GAのAPIを叩きにいくことになってしまうからです。

終わりに

せっかくGAを導入しているのであればAPIを使って上手くコンテンツに反映できると嬉しいですよね。なによりプラグインを使わずにできたという所が良かったです。

新しいウェブ体験を作ろう TAMのPWA開発
お問い合わせはこちら