先日、PHPとWordpress関数を利用して、テーマチェッカーでもエラーが出ない「Pocketストック数取得関数」を書きました。
今回は、その関数を利用してAjaxでPocketのストック数を取得する方法を紹介したいと思います。
目次
主な手順
Pocketのストック数をAjaxで取得するための主な手順は以下です。
- Pocketのストック数取得用のPHPファイルを作成する
- カウントを取得するためのJavaScriptを書く
- カウント表示用のHTML要素を書く
基本的にコピペだけで、Ajaxでのカウント取得部分を実装することができます。
Pocketストック数取得用のPHPファイルを作成する
まずは、自分のドメイン内(テーマ内)にカウント取得用のPHPファイルを作成します。
このPHPファイルをJavaScriptで呼び出すことで、カウントを取得します。
テーマ内に、カウント取得用のPHPファイルを置いて、それをJavaScriptで呼び出すことによって、同一ドメイン内で呼び出されることにより、クロスドメイン制約を回避します。
クロスドメイン制約とは、ブラウザの機能で、閲覧しているページのドメイン以外のドメインからは、Ajax通信をさせないというセキュリティー上の制約です。
PHPファイルの作成
まずは、PHPファイルを作成します。
とりあえず僕は、テーマ(子テーマ)内に「lib」というフォルダを作成して、その中に「fetch-pocket.php」というファイルを作成します。
構造としては以下のようになります。
テーマフォルダ/lib/fetch-pocket.php
libフォルダに入れたのは、他のテーマテンプレートと、ごっちゃにしないためです。
コードを記入
で、先程作成したfetch-pocket.phpファイルに以下のようにコードをコピペします。
<?php //Pocketカウントの非同期取得用 //外部のphpからWordpress のAPIを扱う require_once('../../../../wp-load.php'); //Pocketカウントの取得 function fetch_pocket_count($url) { $query = 'http://widgets.getpocket.com/v1/button?v=1&count=horizontal&url=' . $url; //URL(クエリ)先の情報を取得 $result = wp_remote_get($query); // 正規表現でカウント数のところだけを抽出 preg_match( '/<em id="cnt">([0-9.]+)<\/em>/i', $result["body"], $count ); // 共有数を表示 return isset($count[1]) ? intval($count[1]) : 0; } //URLパラメーターの取得 $url = $_GET['url']; echo fetch_pocket_count($url);
以下の部分は、Wordpressのインストールフォルダにあるwp-load.phpファイルを呼び出すことで、Wordpress関数などを使えるようにしています。
//外部のphpからWordpress のAPIを扱う require_once('../../../../wp-load.php');
カウントを取得するためのJavaScriptを書く
次に、Ajax側からカウント取得用のfetch-pocket.phpファイルを呼び出して、シェア数を得ます。
フッターの</body>手前あたりで以下のように呼び出します。
<script type="text/javascript"> //ポケットのストック数を取得 function fetch_pocket_count(url, selector) { jQuery.ajax({ url: '<?php echo get_stylesheet_directory_uri(); ?>/lib/fetch-pocket.php?url='+url, dataType:'text', timeout: 10000, //10sec }).done(function(res){ jQuery( selector ).text( res || 0 ); }).fail(function(){ jQuery( selector ).html('error;'); }); } fetch_pocket_count(get_permalink(), '.pocket-count'); </script>
これは、.pocket-countクラスのある要素にPocketのストック数を取得し表示させています。
上記コードは、「子テーマ」でカスタマイズすることを前提に書いたコードです。親テーマをカスタマイズする場合は、get_stylesheet_directory_uri()ではなく、get_template_directory_uri()関数を利用してください。
カウント表示用のHTML要素を書く
あとは、Pocketのストック数を表示させたい箇所(例えば、single.phpや、page.phpなど)に、以下のようなHTMLを挿入すれば、この部分にカウントが取得され表示されます。
<span class="pocket-count">0</span>
Font Awesomeのアイコンフォントや、CSSなどで装飾することで以下のようなバルーンボタンなども作ることができます。
↓
Ajaxによりカウント取得
今回はPocketのストック数取得部分のみに絞って方法を紹介しました。デザイン部分に関しては、自前で行ってください。
バルーンスタイルの書き方などは以下にあります。
まとめ
前回、前々回と、取得用APIのないシェア数のAjaxでの取得方法を書きました。
クロスドメイン制約を回避しながら、外部サーバーのデータをJavaScriptで読み込むには、この方法が最も適しているのではないかと思います。(その他にも方法はあるものの、サーバーの設定をいじる必要があったりするので)。