Wordpressから記事とカテゴリとカスタムフィールドとアイキャッチ画像パスを取得するSQL

Wordpressのデータベースから記事、カテゴリ、タグ、アイキャッチ画像、カスタムフィールドを取得した時に使ったSQLを書いていく。
誰かの参考になれば。


以下のSQLは自分の環境での話なのでWhere句を変更すればだいたいどの環境でも似た結果が得られると思う。

記事とカテゴリをとってくる

select * from wp_term_taxonomy T
LEFT JOIN wp_terms TS ON TS.term_id = T.term_id
LEFT JOIN wp_term_relationships R ON T.term_taxonomy_id = R.term_taxonomy_id
LEFT JOIN wp_posts P ON P.ID = R.object_id
where
 P.post_type != 'revision'
and TS.name != 'non'
and T.taxonomy = 'category'
and T.term_id != 40
and T.term_id != 12
and P.post_status = 'publish'
and TS.name != 'top1'  and TS.name != 'top2' and T
S.name != 'top3'
;

特定のカテゴリが使うカスタムフィールドをとってくる

SELECT wp_posts.* , wp_term_relationships.object_id,  wp_postmeta.meta_key,   wp_postmeta.meta_value, wp_posts.guid  /* フィールドを指定 */
  FROM wp_posts, wp_term_relationships, wp_postmeta /* テーブルを指定 */
  WHERE wp_posts.ID = wp_term_relationships.object_id
  AND wp_term_relationships.term_taxonomy_id = 40 /* カテゴリーIDが40のもの */
  AND wp_posts.post_status = 'publish' /* かつ公開済の記事 */
  AND wp_posts.ID = wp_postmeta.post_id  /* テーブル同士の結びつけ */    

アイキャッチ画像のレコードを取得してくる

アイキャッチ画像と記事と同じクエリで表示したかったけど力及ばず別クエリにした。
post_idをとれてるのでアイキャッチを使っている記事と紐付けれる。

SELECT wp_posts.post_name, max(wp_posts.post_modified), wp_posts.post_parent, wp_postmeta.meta_value
FROM wp_posts, wp_postmeta  /* テーブルを指定 */
WHERE wp_posts.post_type = 'attachment'
and  wp_posts.ID = wp_postmeta.post_id  /* テーブル同士の結びつけ */
and  wp_postmeta.meta_key = "_wp_attached_file"
and  post_parent != 0 
group by wp_posts.post_parent
;

タグ情報をとってくる

-- タグの情報をとってくる最終版
select P.id, P.post_title, TS.name, TS.slug
from wp_term_taxonomy T
LEFT JOIN wp_terms TS ON TS.term_id = T.term_id
LEFT JOIN wp_term_relationships R ON T.term_taxonomy_id = R.term_taxonomy_id
LEFT JOIN wp_posts P ON P.ID = R.object_id
where TS.term_id > 28
and P.post_type != 'revision'
and TS.name != 'non'
and T.taxonomy != 'category'
and TS.name != 'top1'  and TS.name != 'top2' and TS.name != 'top3'
;