wordpressの記事を直接DBから取得

一つのサイト内にWordpressと別のシステム等を共存させており、Wordpressじゃないほうから記事を取得したい。

作成日:2017-11-22, 更新日:2020-12-01

やりたいこと

このサイトがそうなんだけど、WordpressとFuelPHPの両方を使っている。
※以前はWordpressとMediaWikiを使ってた。

で、FuelPHPからWordpressで作成した記事を取得したい。

プラグインやRSSを利用するなど方法はいくつかある。

調べたときの気になるキーワードたち
・WP REST API
・RSSを取得
・wp_load.phpを読み込む
・WP-API(JSON REST API)
・wp-includes内のfeed.phpを読み込む
・wp_remote_post関数
・require('wp-blog-header.php');
・XML-RPC機能

調べるのが面倒だったり、外部から叩けるってのは避けたい・・・ってのがあったりして結局DBから直接データを取得することにした。

基本

Wordpressの「wp-config.php」の「$table_prefix」を確認
※「$table_prefix=wp_」となっているときはテーブル名「wp_」から始まる。

下記は、新着が欲しいから日付でソートしている。

公開している記事取得
select ID id, post_modified, post_title, post_excerpt, post_content, post_name 
from wp_posts p 
where post_status="publish" 
order by post_modified desc
公開している記事で、カテゴリ指定して取得
select p.ID, p.post_modified, p.post_title, p.post_excerpt, p.post_content, p.post_name, t.name 
from wp_posts p 
left join wp_term_relationships tr on p.ID=tr.object_id 
left join wp_term_taxonomy tt on tt.term_taxonomy_id=tr.term_taxonomy_id 
left join wp_terms t on t.term_id=tt.term_id 
where p.post_status="publish" 
and t.`name`='〇〇〇'
order by p.post_modified desc

記事にカテゴリは複数設定することが可能なので、1回のクエリで取得できるかもしれないけど・・・分からない。

・wp_posts - 記事。記事の状態はpost_status。
・wp_terms - カテゴリ名。スラッグも含まれるかもしれないけど、未調査
・wp_term_〇〇〇 - wp_termsの詳細や記事との紐づけ

関連項目

Wordpressの関数をWordpress外から呼び出す(wp-load.phpの読込み)
Wordpressの記事一覧を取得(WP REST API)