拙著「WordPress Web開発逆引きレシピ」が発売されました。
WordPressの様々なカスタマイズについて、逆引きの形式で取り上げています。
PHP 7.0での動作確認も行っています。
DataAPIEntryCategoriesプラグイン
Movable Type 6.0では、新機能としてData APIが追加されます。
ただ、現時点のData APIはまだ完成形ではなく、「こんな機能があれば...」と思う点も少なくありません。
その1つとして、記事のカテゴリを操作する機能がありません。
そこで、記事のカテゴリを操作するプラグインを作りました。
1.プラグインの概要
このプラグインは、記事のカテゴリについて、Data APIで以下の3つの操作を行うことができるようにするプラグインです。
- 記事のカテゴリの情報を取得
- 記事にカテゴリを割り当て
- 記事に割り当てたカテゴリをすべて削除
2.インストール
プラグインは以下からダウンロードします。
DataAPIEntryCategories_1_01.zip
ダウンロードしたZipファイルを解凍すると、「plugins」と「mt-static」の2つのフォルダができます。
これらのフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。
3.エンドポイント
このプラグインをインストールすると、「http://your-host/path-to-mt/mt-data-api.cgi/v1/:site_id/entries/:entry_id/categories」のエンドポイントが追加されます。
「your-host」および「path-to-mt」の部分は、ご自分のMovable Typeのインストール先に合わせて読み替えます。
また、「:site_id」と「:entry_id」は、それぞれウェブサイト(またはブログ)のID/記事のIDに置き換えます。
エンドポイントにアクセスする際のHTTPのメソッドに応じて、以下の動作になります。
ID | HTTPのメソッド | 動作 |
---|---|---|
listCategoriesForEntry | GET | 記事のカテゴリの情報を取得 |
attachCategoriesToEntry | PUT | 記事にカテゴリを設定 |
detachCategoriesFromEntry | DELETE | 記事からカテゴリを削除 |
attachCategoriesToEntryおよびdetachCategoriesFromEntryでは、記事を作成する権限があるユーザーとして、認証することが必要です。
attachCategoriesToEntryでは、POSTの際のリクエストボディとして、「category=カテゴリの配列を表すJSON文字列」を付加します。
配列の個々の要素は、「{"id":カテゴリのID}」のようなオブジェクトにします。
また、配列の先頭にしたカテゴリが、メインカテゴリとして設定されます。
メソッドを実行すると、以下のような構造のJSON文字列が返されます。
配列itemsの先頭のカテゴリが、メインカテゴリになります。
{ "totalResults":カテゴリの数, "items": [ カテゴリのオブジェクト, カテゴリのオブジェクト, ・・・ カテゴリのオブジェクト ] }
なお、deleteCategoriesFromEntryでは、削除する前のカテゴリの情報が、上記のJSONの形で返されます。
4.JavaScript SDK
JavaScript SDKで、記事のカテゴリを操作することも可能です。
4-1.ライブラリの読み込み
Data API本体のJavaScriptライブラリを読み込んだ後に、以下のscript要素で追加のライブラリを読み込みます。
<script type="text/javascript" src="http://your-host/path-to-mt/mt-static/plugins/DataAPIEntryCategories/extension.js"></script>
4-2.メソッドの追加
Data APIのオブジェクトを初期化した後、「FJDataAPIEntryCategories.extendEndPoints(Data APIのオブジェクト)」のような文を実行して、メソッドを追加します。
例えば、Data APIのオブジェクトを変数apiに代入するなら、初期化の処理を以下のようにします。
api = new MT.DataAPI({ baseUrl: 'http://your-host/path-to-mt/mt-data-api.cgi', clientId: 'example', }); FJDataAPIEntryCategories.extendEndPoints(api);
4-3.記事のカテゴリの情報を取得
記事のカテゴリの情報を取得するには、以下のようなコードを実行します。
api.listCategoriesForEntry(siteId, entryId, params, function(response) { if (response.error) { // エラー処理 return; } // 成功時の処理 });
paramsを指定して、読み込むフィールドを限定したりすることができます。
paramsを指定しない場合は、省略することもできます。
4-4.記事にカテゴリを割り当て
記事にカテゴリを割り当てるには、以下のようなコードを実行します。
api.attachCategoriesToEntry(siteId, entryId, categories, function(response) { if (response.error) { // エラー処理 return; } // 成功時の処理 });
categoriesには、「{"id":カテゴリのID}」の形式のオブジェクトを配列で指定します。
配列の先頭のカテゴリが、記事のメインカテゴリになります。
4-5.記事のカテゴリを削除
記事のカテゴリを削除するには、以下のようなコードを実行します。
api.detachCategoriesFromEntry(siteId, entryId, function(response) { if (response.error) { // エラー処理 return; } // 成功時の処理 });