AngularJS + WordPress 〜WebAPIを作る〜

タイトルに「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つしか取れていないような?一抹の不安を残して今日は寝ます。

でわでわ。。。