「WordPressで学ぶPHP(1)変数・制御構造編」が発売されました。
「WordPressで学ぶPHP」シリーズの第1巻で、WordPressを通してPHPを学んでいく本です。
この本では、PHPの基本となる変数と制御構造について解説します。
Kindle本で、定価500円です。
Data APIでテンプレートタグの値を使うプラグイン(その3・JavaScriptでの利用)
Data APIにはJavaScriptのライブラリがあり、Webページから比較的簡単にData APIにアクセスすることができます。
テンプレートタグの値を使うプラグインを使う場合も、JavaScriptでアクセスすることができます。
その方法を解説します。
1.パラメータに「rebuildTemplateName: テンプレート名」を付加
JavaScriptでData APIにアクセスする場合、個々のエンドポイントに対応するメソッドで、パラメータを表すオブジェクトを渡すことができます。
そのオブジェクトに、「rebuildTemplateName」のプロパティを作り、それでテンプレート名を指定するようにします。
例えば、listEntriesメソッドで、記事を取得するとします。
この場合、以下のようなコードを書くことで、得た個々の記事に対して「DataAPI Entry」というテンプレートを再構築し、その結果も合わせて得ることができます。
api = new MT.DataAPI({ baseUrl: 'http://your-host/path-to-mt/mt-data-api.cgi', clientId: 'example', }); var params = { rebuildTemplateName: 'DataAPI Entry' }; api.listEntries(siteId, params, function(response) { if (response.error) { エラー時の処理 } 読み込んだ記事に関する処理 });
2.結果を扱う
再構築で得られた値は、個々の記事等のオブジェクトの「rebuildResult」というプロパティに保存されます。
このプロパティの配下に、テンプレート側で指定した変数名と同じプロパティが作られます。
例えば、昨日の記事のように、前後の記事のアドレスを、previous_link/next_linkという変数に代入したとします。
この場合、個々の記事のオブジェクトに以下のようなプロパティが作られ、そこから前後の記事のアドレスを得ることができます。
プロパティ | 値 |
---|---|
rebuildResult.previous_link | 前の記事のアドレス |
rebuildResult.next_link | 次の記事のアドレス |
3.事例
上で示したように、listEntriesメソッドで記事を得る際に、前後の記事のアドレスも合わせて得たとします。
この場合、記事一覧をul/li要素のリストで出力し、かつ個々の記事の前後のアドレスも出力するには、以下のようなJavaScriptのコードを実行します。
api = new MT.DataAPI({ baseUrl: 'http://your-host/path-to-mt/mt-data-api.cgi', clientId: 'example', }); var params = { rebuildTemplateName: 'DataAPI Entry' }; api.listEntries(siteId, params, function(response) { if (response.error) { alert('エラー'); } var entries = response.items; var html = '<ul>'; for (var i = 0, j = entries.length; i < j; i++) { var entry = entries[i]; var rebuildResult = entry.rebuildResult; html += '<li>' + entry.title; if (rebuildResult.previous_link || rebuildResult.next_link) { html += '<ul>'; if (rebuildResult.previous_link) { html += '<li><a href="' + rebuildResult.previous_link + '">前の記事</a></li>'; } if (rebuildResult.next_link) { html += '<li><a href="' + rebuildResult.next_link + '">次の記事</a></li>'; } html += '</ul>'; } } html += '</ul>'; jQuery('#entries').html(html); });