search
LoginSignup
0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

wano-incWanoグループ Advent Calendar 2020 Day 11

posted at

updated at

Organization

Wordpressの記事をカスタムフィールドごとjsonで吐き出す

この記事は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

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
What you can do with signing up
0
Help us understand the problem. What are the problem?