functions.phpにAPIを追加します
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