WordPress の JSON API を拡張する
Wordpress とスマホアプリを連携させるのに JSON を使っています。WP が出力した JSON を、iPhoneアプリで読むのです。JSON API という、拡張性の高いプラグインがあったので、これを利用しました。
JSON API プラグインに対して、「コントローラ」というクラスを登録します。すると、コントローラのメソッドが JSON API としてアクセスできるようになります。Rails のコントローラクラスの仕組みと似ています。
必要なのは、フック2つと、コントローラクラス1つです。まず、JSON_API_Hello_Controller クラスを作ります。
<?php
class JSON_API_Hello_Controller {
public function hello_world() { return array( “message” => “Hello, world” ); }
} ?> </code>
これをフックで登録します。
// カスタムコントローラを登録します
add_filter('json_api_controllers', 'add_hello_controller');
function add_hello_controller($controllers) { // JSON_API_Hello_Controller に対応します $controllers[] = ‘Hello’; return $controllers; }
// JSON_API_Hello_Controller.php のパスを指定します add_filter(‘json_api_widgets_controller_path’, ‘hello_controller_path’);
function hello_controller_path($default_path) { return ‘/path/to/JSON_API_Hello_Controller.php’; } </code>
さらに、wp-admin の管理画面で JSON API の設定を開き、Helloコントローラを有効にします。これがわからなくて、時間を無駄にしました。
ここまでやると、http://example.com/?json=hello.hello_word というURLで Helloコントローラの hello_world() メソッドが呼ばれるようになります。
クエリストリング(URLパラメタ)を見て動作を変えたい場合は、グローバル変数 $json_api から取得できます。
public function hello_person() {
global $json_api;
$name = $json_api->query->name;
return array(
"message" => "Hello, $name."
);
}