1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WordpressのWP REST APIを使って記事データをとってくるまで

Last updated at Posted at 2020-07-08

前回の続きです。
前回の問題点は、レスポンスのjson encodeがうまくいっていなかったようです。

今回やったのは、
https://--------/wp-jsonでjsonを返すのではなく、
カスタムエンドポイントを作って、そこで記事データをjson形式で返す。
と、いうのをやりました。

それでは、手順をざっくりと
#functions.phpにカスタムエンドポイントを登録

functions.php
function add_custom_endpoint()
{
 //投稿データを返す
  register_rest_route(
    'api/v2',
    '/posts',
    array(
      'methods' => WP_REST_Server::READABLE,
      'callback' => 'get_posts_json'
    )
  );
}
add_action('rest_api_init', 'add_custom_endpoint');

/**
 * WP REST APIのレスポンス処理
 * @param {String} $file_name ファイル名(拡張子なし)
 * @param {Array} $param ajaxで受け取ったデータ
 *
 * @return WP_REST_Response
 */
function rest_response($file_name, $param = null)
{
  $api_file = locate_template("api/${file_name}.php");
  $res = !empty($api_file) ? include_once $api_file : [];
  $response = new WP_REST_Response($res);
  $response->set_status(200);
  $domain = (empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"];
  $response->header('Location', $domain);

  return $response;
}

//投稿データを返す
function get_posts_json($param)
{
  return rest_response('posts', $param);
}

#/api/posts.phpを作成
フォルダパスは上のfunctions.phpの$api_fileのところに合わせてください。

posts.php
<?php

header('Content-type: application/json; charset=utf-8');

$query = new WP_Query(
  array(
    'post_type' => 'post',
    'post_status' => 'publish',
    "posts_per_page" => 10
  )
);

if ($query->have_posts()){
  $postObj = [
    array(
      "title" => "",
      "content" => ""
    )
  ];
  $i = 0;
  while ($query->have_posts()){
    $query->the_post();
    $postObj[$i]['title'] = get_the_title();
    $postObj[$i]['content'] = get_the_content();
    $i++;
  }
}

return json_encode($postObj);

やっぱりこれでもだめでした。

それで、json_encode()にオプションを追加したら...

posts.php
return json_encode($postObj, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE);

成功!!

これで、json形式で記事データを返す流れはとりあえずできました。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?