🦔

Wordpressのカスタム投稿データをLaravelで表示する

2022/11/13に公開

バージョン

・PHP 8.1.9
・Laravel 9.24.0
・Wordpress 6.0.2

方法

大まかに3つ
1、WordpressのREST APIを使用する
2、Laravel側でWordpress関数を使用する
3、WordpressのDBから直接呼び出す

1、WordpressのREST APIを使用する

Wordpressの知識も必要なく、お手軽なのがメリット
一方で、データ取得時にできることが多くはないので最終的にアウトプットしたいデータの条件が複雑な場合、Laravel側のコードが煩雑になる。

方法

※Wordpressのカスタム投稿データの作成にはプラグイン「Advanced Custom Fields」を使って作成しているものとする。

Wordpress内、カスタムフィールドのフィールドグループ編集画面にて「Show in REST API」を'はい'にする


http://exapmle.com/wp-json/acf/v2/POST_TYPE

すると、上記エンドポイントを基本形に投稿データのレスポンスが取得可能となる。(POST_TYPEは取得したいカスタム投稿のタイプを指定する)

また、以下のようにクエリパラメーターを設定することで色々な条件でデータを取得することができる。

(例)取得データの並び順の指定

https://exapmle.com/wp-json/wp/v2/POST_TYPE?order=[VALUE]

など。

指定できる条件について、詳しくは以下記事を参照
https://designsupply-web.com/media/programming/6307/


余談

今回はデータを取得(GET)することのみを目的としているが、使い方によりデータの追加(POST)、編集(PUT)、削除(DELETE)も行うことができる。

詳しくは以下記事を参照
https://www.onamae.com/column/wordpress/55/#article1_0


2、Laravel側でWordpress関数を使用する

Laravel側でWordpressのwp-load.phpを読み込ませる方法
これによりLaravel側でWordpress関数が使えるようになるので、WP_Query等を使用して投稿データを取得できるようになる。
REST APIを使用する方法よりも、データ取得時に指定できる条件は多い。

方法

フォルダ構成を以下のようにした場合

.
├── app                 # Laravel側のソースコード置き場
│   └── public
│       └── index.php   # wp-load.phpをここで読み込ませる
└── wp                  # Wordpress側のソースコード置き場
    └── wp-load.php



index.php内で相対パスでwp-load.phpを読み込む。
読み込みを行うコードの記述位置はuse文のすぐ下にし、ファイルの最初に読み込まれるようにする。

index.php

<?php

use Illuminate\Contracts\Http\Kernel;
use Illuminate\Http\Request;

require __DIR__.'/../../wp/wp-load.php';



これでWordpress関数が使えるようになるので使用可能。
WP_Queryなど、Wordpressのお勉強をして、欲しいデータを取得する。


3、WordpressのDBから直接呼び出す

Wordpressをインストールすると初期状態でのDBテーブルは以下のようになっている。

[https://www.onamae.com/column/wordpress/45/ より]

カスタム投稿で記事を投稿した場合は、まずwp_postsテーブルに投稿データが1レコード保存される。
さらにそのwp_postsのデータに紐づく形でwp_postmetaテーブルにカスタムフィールドなどのメタ情報が複数レコード保存される。

WordpressのDBの操作自体は、$wpdbというグローバル関数とSQLを用いて行うことができるよう。

自分ではやったことはないが、WordpressのDBを見てみるとwp_postmetaのデータが複雑であり、またタームやタクソノミーを利用したい場合はさらに複雑さを極めそうなので正直、極力手を出さないようにしたいと思った。

おわりに

今回3つの方法を挙げたが、使える状況なのであれば2番がやれることが多くておすすめ。
ちょっとしたデータ取得や2番ができないような状態であれば1番でもいいが、進めているうちに「これできないんだ」となることが出てくる可能性もある。

Discussion