2
0

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の記事をカスタムフィールドごとjsonで吐き出す

Last updated at Posted at 2020-12-10

この記事はWanoグループ Advent Calendar 2020 の11日目です。

他所との連携でjson形式でやり取りしたい!というパターンが増えて来たので備忘録がてら。

WP REST APIを使え?
当然そちらのほうがスマートなんですが、Wordpressがメジャーすぎてアップデートの度にすぐにゼロデイ攻撃の対象になるので__セキュリティをガッチガチに固めてからでないと__怖くて使えません…
(もう3年も前なんですねREST APIの脆弱性攻撃)

要件

  • パラメータで「何件取得するか、何ページ目を取得するか」を設定可能にしたい
  • カスタムフィールドごと突っ込みたい

コード

まず適当にjson_apiのような固定ページを作成し、
対象のテンプレートを下記のように記述。

page-json_api.php
<?php
//getパラメータを取得
$ppp = $_GET["ppp"]; // 1ページ当たりの取得件数
$cp = $_GET["cp"]; // 何ページ目を持ってくるか

$args = array(
  'post_type' => array('post'), // 取得する投稿タイプをarray内に記載
  'post_status' => 'publish',
  'orderby'     => 'post_date',
  'order'       => 'DESC',
  'posts_per_page' => $ppp,
  'paged'       => $cp,
);

$the_query = new WP_Query($args);

if($the_query->have_posts()) {
  $count = 0;
  while ($the_query->have_posts()) {
    $the_query->the_post();
      setup_postdata($post);
      $custom = get_post_custom($post->ID);
      $json[$count] = $post;
      $json[$count]->custom = $custom;
      $count++;
  }
}

header("Content-Type: application/json; charset=utf-8");
echo json_encode($json,JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
?>

出力

上記で /json-api/?ppp=10&cp=1 とパラメータを指定してアクセスすると出力されます。

[
  {
    "ID": 1,
    "post_author": "1",
    "post_date": "2020-12-10 12:12:12",
    "post_date_gmt": "2020-12-10 12:12:12",
    "post_content": "記事本文",
    "post_title": "記事タイトル",

~~~

    "custom": {
      "post_thumb": [
        "hoge"
      ],
    }
  },
  {
    "ID": 2,
    "post_author": "1",
    "post_date": "2020-12-10 12:12:12",
    "post_date_gmt": "2020-12-10 12:12:12",
    "post_content": "記事本文",
    "post_title": "記事タイトル",

~~~

    "custom": {
      "post_thumb": [
        "hoge"
      ],
    }
  }
}

最後に

これで大概のwordpressの投稿データはどこかしらにぶん投げられます。
WP_QUERYのクエリの部分を変更すれば他にもカテゴリでのフィルタだったり投稿日時でのフィルタだったりをパラメータ指定できるようにも改造可能になっています。

くれぐれもセキュリティにはご用心を!

===================================

Wanoは積極的にエンジニア採用を行なっています!
まずはオンラインでVPoEとのカジュアル面談から。お好きな入り口からお気軽にお声がけください!
Wano Recruitページ https://group.wano.co.jp/recruit/
QiitaJobs https://jobs.qiita.com/employers/wano-inc/postings/1297
Wantedly https://www.wantedly.com/companies/wano/projects
Findy https://findy-code.io/companies/522

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?