WordPressでかんたんWeb API構築

えーと、またしても何ヶ月ぶりでしょうか。。1年ぶりくらい?時の経つのは早いですね。
そして、同時進行な案件が重なりすぎて自分のことなんもできません。

そんななか、とあるiPhoneアプリ案件でサーバのデータを拾ってくる処理
いわゆるAPIを叩いてJSONデータのレスポンスを受けるweb APIなアレを作ってます。

普通にPHPやCakePHPでさくっと作ってしまえばいいのですが、クライアント側で更新するためどうしても管理画面が必要なるのですが、
管理画面をイチから構築って地味に面倒ですよね。

そーいやWordpressなら管理画面やらフロントエンドやら一式そろってるし、一発で済むんでないの??ってフと思い立ち
ちょっと試してみました。

WordPressの投稿系は
・カスタム投稿タイプ
・カスタムフィールド
あとはクライアントが使いやすいように管理画面をカスタマイズすれば十分。
ユーザー認証(管理画面へのログイン)も付いてるのでなんと楽なことでしょーか。

リクエスト/レスポンスまわりは プラグインの JSON APIで済みそう。

CakePHPみたいなコントローラークラス内にメソッドを追加していけばそれで受けてくれる模様。

まず、functions.php内にてコントローラーを追加します。
コントローラー名は「TestApi」

// コントローラーを追加
// add_testapi_controllerは登録するための関数名(適宜)
add_filter('json_api_controllers', 'add_testapi_controller');   
function add_testapi_controller($controllers) {   
    $controllers[] = 'TestApi'; //コントローラー名を指定
    Return $controllers; 
} 

// json_api_*コントローラ名*_controller_path コントローラ名は全て小文字

add_filter('json_api_testapi_controller_path', 'testapi_controller_path');   
function testapi_controller_path($default_path) {
    $path=get_template_directory().'/JSON_API_TestApi_Controller.php'; //コントローラのファイルパス
    return $path;   
}

2つめのfilterでハマったのが
「json_api_*コントローラ名*_controller_path」
この記法を変えないように。

get_template_directory().’/JSON_API_TestApi_Controller.php’;
これは、使用中のテンプレートディレクリ直下にコントローラのファイルを置くことを想定しています。

コントローラーファイルもこの記法にしたほうが無難です。
JSON_API_*コントローラ名*_Controller.php

そして、本題のコントローラ
下記のように冒頭にコメントを入れることで、プラグイン設定の部分に概要が表示されます。

<?php
/*
Controller name: TestApi
Controller description: テスト用API
*/
class JSON_API_TestApi_Controller {   
    
    public function all() { 
        $args= array('post_type' => 'post');
        $result_query = new WP_Query($args);          
        
        $result=array();
        if ($result_query->have_posts()) {
            while ($result_query->have_posts()){
                $result_query->the_post();
                
                $data['post_id']=get_the_ID();
                $data['title']=get_the_title();
                $data['date']=get_the_date('Y.m.d H:i');
                $data['content']=get_the_content();
                array_push($result,$data);
            }
        }
        wp_reset_postdata();
        return array( "result" => $result ); 
    }
}
?>

ここでは全投稿記事を取得しjsonで返送するメソッドallを作っています。
みてわかるとおり、フツーに検索してループ内で整形処理し、最後にresultという連想配列へ突っ込んで返しているだけです。
あとはプラグイン側でjsonで出力しています。

今回WP_Queryを使用しましたが、query_postsでも大丈夫です。
フツーにループで処理しているので、カスタム投稿もいつも通りに使えました。

もちろん、the_title() メソッドではechoで出力してしまうので get_the_title()などに置き換えてください。

また、引数を取り合い場合は
$_GET
$_POST
などで普通にPHP的に引数を取得できます。

最後に、コントローラファイルを配置したところで、プラグイン設定のコントローラを有効化します。
(コントローラファイルを配置しない状態ではエラーがでるはず)
WP管理面の「設定」-「JSON API」にてTestAPIを有効化してください。

スクリーンショット 2013-12-01 22.01.43

ちなみに有効化の隣のメソッド名をクリックするとメソッドを呼んでくれます。

さっくり作れるのはいいんですが、トークンやらIDやらなんにもやってないのでダダ漏れ上等なAPIではあります。
あくまでさっくりAPIってことで

Share on Facebook

Comments are Disabled