タイトルに「WebAPI」と格好良いことを記載しましたが、つまるところはリクエストを飛ばしてその返り値にJSONを渡してやる。。。それだけです。
AngularからWPを呼ぶ
今回は、AngularJSからのリクエストなので「$http」オブジェクトを使用します。そして、リクエスト先は自作のphpファイルです。なので「httpls://zenryokuservice.com/XXX/」
というようなURLへのリクエストを飛ばします。
PHPの処理
PHP(WP)側はカテゴリの一覧を取得してJSONにして返却する。これだけです。
実装(PHP)
このサイトを参考にして関数の使い方を見ながら作成します。
作成したコードは下のようなコードです。(PHP)
/** エンコード */ header("Content-Type: text/html; charset=UTF-8"); /** 日付の設定 */ date_default_timezone_set('Asia/Tokyo'); /** Loads the WordPress Environment and Template */ require( dirname( __FILE__ ) . '/wp/wp-includes/pluggable.php' ); try { // カテゴリの全取得ようパラメータ $paramArr = array('type' => 'post', 'orderby' => 'name', 'order' => 'ASC', 'taxonomy' => 'category'); // 引数 $categories = get_categories($paramArr); $cnt = 0; $jsonArr = array(); foreach($categories as $cat){ $catLink = get_category_link($cat->term_id); $catName = $cat->name; $jsonArr = array_merge($jsonArr, array('name' => $catName, 'url' => $catLink)); } echo json_encode($jsonArr); } catch($e) { echo $e; }
しかし、動きません。try-catchで囲んでもエラーの内容が見れません。。。
PHPは〜。。。もどかしいですが、一行ずつ実行していきますか。。。
そんなわけで、word-pressの関数が怪しいと思い、WPのインクルード方法を探します。。。
WordPress関数ロード
結局は/wp/wp-load.phpをロードすれば良いというところでした。
動かない原因
catch($e)
の部分が間違っていました。catch(Exception $e)
でした。このページを見るとtry-cathの書き方が書いてありました。
JSと混同していたようです。。。
結局は。。。
下のようなコードで動きました。JSサイドはまだ実装していないのであれですが。。。
/** エンコード */ header("Content-Type: text/html; charset=UTF-8"); /** 日付の設定 */ date_default_timezone_set('Asia/Tokyo'); require( '/wp/wp-load.php' ); try { // カテゴリの全取得ようパラメータ $paramArr = array('type' => 'post', 'orderby' => 'name', 'order' => 'ASC', 'taxonomy' => 'category'); // 引数 $categories = get_categories($paramArr); $cnt = 0; $jsonArr = array(); foreach($categories as $cat){ $catLink = get_category_link($cat->term_id); $catName = $cat->name; $jsonArr = array_merge($jsonArr, array('name' => $catName, 'url' => $catLink)); } echo json_encode($jsonArr); } catch(Exception $e) { echo $e; }
これでサーバーサイドの処理ができたと思われるので、JSの方の実装を行います。
ただ、デバックしたときにデータが1つしか取れていないような?一抹の不安を残して今日は寝ます。
でわでわ。。。