functions.phpにAPIを追加します

Kotlin

functions.php

function get_wp_destination_data() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'destination';
    $results = $wpdb->get_results("SELECT * FROM $table_name ORDER BY created_at DESC", ARRAY_A);
    if ($results) {
        wp_send_json_success($results);
        /* return rest_ensure_response($results); ※1 */
    } else {
        wp_send_json_error("NO DATA FOUND");
    }
}

add_action('rest_api_init', function(){
    register_rest_route('custom/v1', '/get-destination', array(
        'methods' => 'GET', ※1
        'callback' => 'get_wp_destination_data',
        'permission_callback' => '__return_true',
    ));
});

※1 rest_ensure_response

WP REST APIではWP_REST_Response型のオブジェクトをレスポンス (return)しなければならないというルールがあります。

なので、$resultsのような配列データを直接returnするとエラーが発生する場合があります。

型が違った場合にWP_REST_Response型に変換することでresponse errorが出ないようにensure(保証)してくれるのがrest_ensure_responseです

※1 … POSTとGET

POST … AndroidStudioからWordPressのデータベースにデータを保存するとき

GET … WordPressのデータベースからデータをGETしてAndroidStudio側に表示するとき

'methods' => array('GET', 'POST'),

としてGETでもPOSTでも問題ないようにします。

コードが正しい場合

実際に、https://xxx.com/wp-json/custom/v1/get-destination にアクセスすると次のような配列が表示されます。これはwp_destinationのデータです

[{"id":"1","en1":"h","en2":"o","en3":"t","en4":"","en5":"d","en6":"o","en7":"g","en8":"","en9":"","en10":"","en11":"","en12":"","en13":"","en14":"","en15":"","en16":"","en17":"","en18":"","en19":"","en20":"","en21":"","en22":"","en23":"","en24":"","en25":"","en26":"","en27":"","en28":"","en29":"","en30":""}]

コードが正しくない場合

コードが正しくない場合、https://xxx.com/wp-json/custom/v1/get-destination にアクセスすると次のようなコードが表示されます。

{"code":"rest_no_route","message":"URL \u3068\u30ea\u30af\u30a8\u30b9\u30c8\u30e1\u30bd\u30c3\u30c9\u306b\u4e00\u81f4\u3059\u308b\u30eb\u30fc\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002","data":{"status":404}}

これは「404エラー」であり、このURLのエンドポイントが存在しないことを意味します。

以下の2点を確認してください。

・エンドポイントのURL文字列が正しいかどうか

・’methods’ => ‘POST’ なのか ‘GET’なのか

BACK