WordPressで人気記事を表示するには様々な方法があります。おそらくよく利用されるのが「プラグイン」だと思いますが、このブログではウィジェットエリアを使用していないので「Google Analytics API(V3)」を用いて作成してみました。
目次
API を使って Analytics の解析情報を取得する
1.OAuth 2.0 Client ID を取得する
「Google Analytics API」を利用する前に、「OAuth 2.0 Client ID」を取得する必要があります。
[手順]
1. 「Google APIs Console」にアクセスし、プロジェクトがない場合は “Create project...” をクリックします。

2. 左側のメニューの “Service” をクリックし、「Analytics API」を “ON” にします。

3. 同じくメニューの “API Access” をクリックし、 “Create an OAuth 2.0 Client ID.” をクリック。すると入力画面が出るので、それぞれ入力しますが、とりあえずは “Product name” のみ入力すれば良いようです。

4. [Next] をクリックして次の画面へ。 “Application type” は “Web application” を選択します。 “Redirect URI” については、とりあえず自分のウェブサイトの URI を入れておきます。

5. 全て入力し終わったら、 [Create client ID] をクリックして Client ID を作成します。作成が完了すると、 “API Access” ページに “Client ID” や “Client secret” などが表示されます。

今回使うのは、“Client ID”と “Client secret”、“Redirect URIs” の合わせて3つです。
メモしておいてください。なお、あとから “Redirect URIs” は変更します。
6. 次に、ライブラリをダウンロードします。「google-api-php-client」にアクセスして、ライブラリをダウンロードします。

7. ダウンロードしたファイルを解凍し、google-api-php-client\srcフォルダを自分が使っているテーマディレクトリ直下/wp-content/themes/(自分が使用しているテーマ)にアップロードします。
解析結果を取得するプログラムを作成
以下のコードを新規作成したPHPファイルにかいていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
<?php require_once 'google-api-php-client/src/Google_Client.php'; require_once 'google-api-php-client/src/contrib/Google_AnalyticsService.php'; session_start(); $client = new Google_Client(); // [A] Client ID $client->setClientId( 'XXXXXXXXXXXX.apps.googleusercontent.com' ); // [B] Client secret $client->setClientSecret( 'XXXXXXXXXXXXXXXXXXXXXXXX' ); // [C] Redirect URIs $client->setRedirectUri( 'http://example.com' ); // $token_path = 'google-api-php-client/gapi_token.txt'; $result_path = 'google-api-php-client/gapi_anaresult.txt'; $service = new Google_AnalyticsService( $client ); if( isset( $_GET[ 'code' ] ) ) { $client->authenticate(); $_SESSION[ 'token' ] = $client->getAccessToken(); header( 'Location: http://' . $_SERVER[ 'HTTP_HOST' ] . $_SERVER[ 'PHP_SELF' ] ); exit; } if( isset( $_SESSION[ 'token' ] ) ) { $string = $_SESSION[ 'token' ]; $fp = fopen( $token_path, "w" ); @fwrite( $fp, $string, strlen( $string ) ); fclose( $fp ); unset( $string ); $client->setAccessToken( $_SESSION[ 'token' ] ); } elseif( file_exists( $token_path ) ) { $token = @file( $token_path ); $client->setAccessToken( $token[0] ); } if( $client->getAccessToken() ) { try { // [D] プロファイルID $ids = 'ga:XXXXXXXX'; // 30日前から $start_date = date( 'Y-m-d', strtotime( "-30 day", time() ) ); // 今日までの期間 $end_date = date( 'Y-m-d', strtotime( "today", time() ) ); $metrics = 'ga:pageviews'; $dimensions = 'ga:pageTitle, ga:pagePath'; $sort = '-ga:pageviews'; $filters = null; $max_results = 10; // 表示する投稿数より多くしておく $optParams = array( 'dimensions' => $dimensions, 'sort' => $sort, 'filters' => $filters, 'max-results' => $max_results ); $data = $service->data_ga->get( $ids, $start_date, $end_date, $metrics, $optParams ); $results = array(); foreach( $data[ 'rows' ] as $row => $value ) { foreach( $data[ 'columnHeaders' ] as $key => $header ) { $results[ $row ][ $header[ 'name' ] ] = $value[ $key ]; } } foreach( $results as $result ) { $string .= "{$result[ 'ga:pagePath' ]}, {$result[ 'ga:pageTitle' ]}, {$result[ 'ga:pageviews' ]}\n"; } $fp = fopen( $result_path, "w" ); @fwrite( $fp, $string, strlen( $string ) ); fclose( $fp ); echo $string; } catch( apiServiceException $e ) { echo $e->getMessage(); } } else { $auth_url = $client->createAuthUrl(); echo 'トークンを入手できませんでした。<a href="' . $auth_url . '">ここをクリックしてアクセスを許可してください。</a>'; } |
[コメントA-Dまでの解説]
- [A][B][C]
先程取得した [Create client ID]に記載されているものをここへ入力します。
ただし、[C]の“Redirect URIs”に関しては、
1 |
(自分のサイトのホームページURL)/wp-content/themes/(自分が使用しているテーマ)/api-popular.php |
としておきます。
- [D]
ここには Analytics のプロファイルIDを入れます。
プロファイルIDは、 [アナリティクス設定] - [プロファイル設定] にあります。

書いたモノをapi-popular.phpと名前をつけ、テーマディレクトリ直下にアップロードします。
アップが完了したら、ブラウザでこのプログラムにアクセスします。
すると、”/wp-content/themes/(テーマ名)/google-api-php-client/”の直下に以下のファイルが出力されていると思います。
- gapi_token.txt
- gapi_anaresult.txt
以上で、取得が全て完了になります。
プログラムをcron登録
取得するのは、自動で実行されません。
cron登録しましょう。
cron とは UNIX系システムの常駐プログラム(デーモン)の一種で、ユーザの設定したスケジュールに基づいて指定したコマンドやシェルスクリプトなどを自動実行してくれるプログラム。
cron登録については浅はかな知識しか持ち合わせていないため、ここでは割愛させていただきます。
取得したデータを表示させる
次は、最終段階。
サイドバーに表示させます。
表示させるのは、アイキャッチ画像とタイトルと閲覧回数の3つです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
<?php $result_path = 'wp-content/themes/(テーマ名)/google-api-php-client/gapi_anaresult.txt'; if( !( file_exists( $result_path ) ) ) { echo '取得エラー'; } $data = @file( $result_path ); $cnt = '1'; echo '<ul>'; foreach ($data as $value) { $printdata = preg_split('/,/', $value); //topページを除外 if($printdata[0]=='/home'){continue;} $post_url = str_replace(" ", "", $printdata[0]); //タイトルを整形する $replaceTitle = str_replace(" ", "", $printdata[1]); $replaceTitle = str_replace("|InfinityScope", "", $replaceTitle); if(!$replaceTitle){$replaceTitle='「No Title」';} $post_view = str_replace(" ", "", $printdata[2]); $post_id = url_to_postid( $post_url ); if( $post_id == 0 ) { continue; } else { echo '<li class="popular-posts cat-item-'.$cnt.'">'; if( has_post_thumbnail( $post_id ) ) { $post_thumb_id = get_post_thumbnail_id( $post_id ); $post_thumb_src = wp_get_attachment_image_src( $post_thumb_id ); $post_thumb_src = $post_thumb_src[0]; echo '<img src="'.$post_thumb_src.'" width=\"75\" height=\"75\" alt='.$replaceTitle.'" title='.$replaceTitle.' />'; } else { echo '<img src="'.$post_thumb_src.'images/no_thumb.png" width=\"75\" height=\"75\" alt='.$replaceTitle.'" title='.$replaceTitle.' />'; } echo '<a href="'.$printdata[0].'">'.$replaceTitle.'</a><span class="tab-sub">'.$printdata[2].' Views</span></li>'; } $cnt++; if( $cnt > '5' ) {break;} } echo '</ul>'; ?> |
表示する記事数を5にしています。記事数を変更される場合は、
1 |
if( $cnt > '5' ) {break;} |
の部分の数字を変更してください。
以上で、すべて完了です。
とってもとっても長くなってしまいました。
参考にさせていただいたサイト