wordpressでのスマホ対応webサイト制作・wpプラグイン・PHPプログラム・SNS活用・ 動画・bgmやテーマ曲アレンジまで考えるコラム!

WordPress・REST APIのjsonファイルにカスタムフィールドを入れ、タイトル・アイキャッチと共に外部サイトで取得・表示

   

こんにちは、管理人@SS_mshpです。

今回は、管理人がWPで作ったサイトのコンテンツを、別の自社運営サイトでも使いまわす方法として、REST APIで記事情報を取得してみた件についてお話しします。基本的なPHPでの取得・表示のしかたや、カスタムフィールドを含める場合はどうするか、確認していってみましょう。

REST APIとは?アドレス形式は?危険性はないの?

WordPress REST APIとは?

昔はプラグインで提供されていたんですけど、過去バージョンを調べたところ『Wordpress 4.7』からコアに搭載されました。 JSON形式でデータをやり取りする機能です。取れるデータには記事情報・ユーザー情報・タクソノミーやフィールドなどがあり、webアプリやプラグインなどに活用できます。

メジャーな機能だと『Gutenbergブロックエディタ』などでも使われているようです。

jsonのアドレス形式は?

  • https://〇〇(ドメイン)/wp-json
  • https://〇〇(ドメイン)/wp-json/wp/v2/users(ユーザー)
  • https://〇〇(ドメイン)/wp-json/wp/v2/posts
  • https://〇〇(ドメイン)/wp-json/wp/v2/posts/△△(id指定)

アドレス形式はこんな感じです。一番下は数字を入れて投稿idを指定できますし、クエリパラメーターによって『何件取る』というような指定もできます。ユーザーデータも取れるので、ここは注意してください。

REST APIの危険性はないの?

上記の『ユーザー情報もjsonで取れる』みたいな点は注意ポイントです。管理人が回しているサイトは基本的に管理者ユーザーが自分だけなので、あまり問題になりません。しかし、『他のユーザーや顧客が登録されていて、ユーザー名や個人情報は隠したい(アドレス形式知っている&デコードを知っている人ならサクッと抜ける)』みたいなケースが出てくるかもしれないので、アクセス制限やファンクションで無効化は検討しましょう。

また、昔のバージョンではREST APIがポンコツだったので(笑)、改ざんされる危険性がありました。WP4.7.0 ~ 4.7.1のバージョンを使っている方は、かならずコアをアップデートしてからREST APIを使うようにしましょう

WordPress・REST APIのjsonファイルにカスタムフィールドを入れ、タイトル・アイキャッチと共に外部サイトで取得・表示する方法

というわけで、概要を押さえたあとは、さっそくREST APIで『WP記事情報を外部サイトで使う機能』を実装してみたいとおもいます。
取得元になるサイトは、いつものように管理人が使っている『著作権フリー曲サイトSSF』で、取得情報は『タイトル・アイキャッチ・カスタムフィールドに入れたオーディオのアドレス』。『別のサブドメインを割り当てた外部フォルダ内のphpファイルで』

REST APIのjsonファイルは、デフォルト状態だとカスタムフィールドが入ってこない


とりあえず、取得したい記事をid番号で指定してjsonにアクセス。デコードして内容を確認します。デフォルト状態だとフィールドが入ってこない様子。


取りたいフィールド名は『wp_attached_mp3』ですが、単純にjson取得しただけでは(var_dumpして確認)、中身がnullになっていて取れません。jsonにフィールド値を含めるファンクションを組んでみます。

コード例(functions.php / 外部のphpファイル)

ポイント1:WP5.5以降なら、register_metaでサックリ書ける

functions.phpで指定したコードは、REST APIにフィールドを登録・コールバック関数を設定したりといった感じでコード量が増えていますが、5.5のバージョンアップからフィールド登録がシンプルになった模様。register_metaを使うと簡単です

ポイント2:PHP配列要素へのアクセスのしかたを意識

外部取得部分で、["rendered"]や、フィールドの["wp_attached_mp3"][0]みたいな書き方になっていますが、これらは『連想配列のキー』とか、『配列の要素の番号(最初は0)』みたいにイメージすると、書き方がつかみやすいと思います。

表示例~外部サイトでもWP記事情報の利用ok!


そんな感じで、SSFとは別のサブドメイン&WPも入っていない状態・wp-blog-header.phpも読んでいない状態のサイトで、記事情報を取得・表示ができました。ふつうにhtmlタグで貼ったほうが早かったかもしれませんが、jsonからデータ抜くっていうのをやってみたかったんで、よしとしますか。

参考リンク(ただし英語・developer.wordpress.org)

あとがき・まとめ

  • REST APIで記事情報などへのアクセスが容易に。バージョンによる脆弱性や、公開しない情報に気をつけて使う
  • REST APIのjsonにフィールド値を含めるのは、wp5.5以降だと一行で書けてラク
  • 一部の要素は、配列にアクセスする感じで記載

まとめると、こんなところでしょうか。これで外部サイトでもWP記事使いまわしができるようになりました。複数サイトやプラグイン/webアプリなどを検討している方は、ぜひ使ってみてください。

◆この記事で問い合わせ

*アトリエSS・web制作サービスページに移動します。webリニューアル・ロゴ・記事・wordpress化などでお力添えできます。
『サイトを既にお持ちで、リニューアル』の場合は、¥10万以下でご対応します(月額管理費/24回支払い縛りなどの強制無し)。

【カテゴリ】 - PHP・データベースetc
【タグ】 - , , ,

  関連記事

【WordPress条件分岐】is_singleとis_singularって違うの?→idやスラッグ指定、投稿タイプ指定の面で違いが

今回は、WPの条件分岐などに使うファンクションで、名前が超似てい ...

【WordPressカスタムフィールド検索】meta_queryで、シリアライズ値が入ったフィールドを持つ記事をヒットさせるには?

今回は、ちょっと需要があるかもしれない『WordPressカスタ ...

【WordPress組み込み関数】is_home()とis_front_page()って同じ?→似てますが、厳密には挙動が異なります

今回は、WordPressで条件分岐するときによく使われる組み込 ...

【WordPressユーザー名バレ対策】ユーザー名表示からPHP・preg_matchでリダイレクト(wp-json/wp/v2/usersなど)

今回は、WPログインなどにも使われる情報『ユーザー名』が表示され ...

【PHP etc.プログラム学習サイトコードコピペ】全角引用符・バッククオートが入ってて動かない件に注意

今回は、管理人が学習サイトなどでコードを調べていて、4回くらい遭 ...

WordPressの記事IDで判定して転送~PHP・headerとget_the_IDで対応、the_IDとの挙動の違いも

今回は、前回の『別ディレクトリにWP記事を出す』の続きで、新しい ...

【WP記事取得クエリ・プラグイン無し】お知らせなどに使える、ショートコードで特定カテゴリ記事を表示プログラム

今回は、最近何件か対応した、お客さん提供用の自社開発WPテーマに ...