MySQLを使ってWordPressのタイトルとタクソノミーを一覧取得

Last modified date

WordPressのタイトルやタクソノミーを表示するクエリ文

クエリで全ての記事タイトルとタクソノミーを表示

今回は全記事のタイトルとカテゴリーを表示してやろう。
使うテーブルは、「wp_posts」「wp_terms」「wp_term_relationships」の3つだ。

select
wp_posts.post_title,
wp_terms.name as category
from
wp_posts,
wp_terms,
wp_term_relationships
where wp_posts.post_type = 'post'
and ( wp_posts.post_status = 'publish')
and wp_posts.ID = wp_term_relationships.object_id
and wp_term_relationships.term_taxonomy_id = wp_terms.term_id
;

wp_term_relationshipsとは

記事タイトルはwp_postsのpost_titleに格納されており、カテゴリ名はwp_termsのnameに格納されているぞ。

では、この2つのテーブルで事足りるかというと、そうではないのである。

wp_postsは記事の情報のみ。wp_termsはタームの情報のみしか格納していない。

どの記事がどのカテゴリーを持っているか、紐付いているのか。という情報はお互いに持っていないので、この2つを繋げるテーブルが必要になるのだ。

もともとWordPressのデータベースは複数のテーブルをつなげてデータを表示したり、操作するので、特定のテーブルだけで欲しい情報を取得できることはなかなか無い。

今回この2つのテーブルを繋げる、接着剤のような役割をしているテーブル

それがwp_term_relationshipsである。

上のクエリ文を5W1Hに変換するとだいたいこんなイメージ

what?(何を?)
→post_titleとwp_termのnameをcategoryとして取得する

select
wp_posts.post_title,
wp_terms.name as category

where?(どのテーブルから?)
→wp_posts,wp_terms,wp_term_relationshipsから

from
wp_posts,
wp_terms,
wp_term_relationships

how?(どのように?)
ポストタイプがpost、記事状態は公開済みのもの。
wp_postsのIDとwp_term_relationshipsのobject_idと同じもの。
かつ、
wp_term_relationshipsのterm_taxonomy_idとwp_termsのterm_idと同じもの。

where wp_posts.post_type = 'post'
and ( wp_posts.post_status = 'publish')
and wp_posts.ID = wp_term_relationships.object_id
and wp_term_relationships.term_taxonomy_id = wp_terms.term_id

これらのクエリ文を合わせると

select
wp_posts.post_title,
wp_terms.name as category
from
wp_posts,
wp_terms,
wp_term_relationships
where wp_posts.post_type = 'post'
and ( wp_posts.post_status = 'publish')
and wp_posts.ID = wp_term_relationships.object_id
and wp_term_relationships.term_taxonomy_id = wp_terms.term_id
;

となる。

これで、全記事のタイトルと、登録しているカテゴリーを表示させることができるはずだ!

ちなみにpost_typeを別のものに変えればカスタムポストを表示させたりカスタマイズできるので、やってみるがよい。

データベースを操作する際の注意点

必ずバックアップを取るように

データベースを操作して、誤ってデータを消してしまっても、戻すことはできない。
操作前には必ずバックアップを取ってから、行うのであるぞ!

魔王様

コメントを残す

メールアドレスが公開されることはありません。

Post comment