###前提・実現したいこと
Wordpressから直接外部へレコードを引っ張ってこようとして、困っているのでお力をお借りしたいです。
やりたいこととしまして、Wordpressのカテゴリーやタグなどを引っ張ってきたのですが、カテゴリーやタグが複数あると、配列が複数に分かれて出力されてしまいます。
例えば、最新のpost(id=1)にカテゴリーがhoge
、hoge2
のようにあると、ループした時に、post(id=1)が二回ループされ、最初にhoge
その次の配列にhoge2
が入ってきてしまような状態です。
これをpost(id=1)内に納めたいです。
また下記のSQLもっといい書き方ありましたら指南いただきたいです。
###該当のソースコード
SQL
1$sql = "SELECT * FROM $wpdb->posts AS P JOIN $wpdb->term_relationships AS TR ON P.id = TR.object_id JOIN $wpdb->term_taxonomy AS TT ON TR.term_taxonomy_id = TT.term_taxonomy_id JOIN $wpdb->terms AS T ON TR.term_taxonomy_id = T.term_id WHERE post_status = 'publish' ORDER BY post_date DESC LIMIT 30";
###データサンプル
該当するテーブル
- wp_posts
- wp_terms
- wp_term_relationships
- wp_term_taxonomy
######関係のありそうな部分のカラムだけ載せておきます。
wp_postsの構造(記事情報が格納されている)
- id
- title
wp_termの構造(カテゴリとタグが格納されている)
- term_id
- name (カテゴリ or タグの名前)
- slug (カテゴリ or タグのスラッグ名)
wp_term_relationshipsの構造()
- object_id
- term_taxonomy_id
wp_term_taxonomy
- term_taxonomy_id
- term_id
- taxonomy (category or post_tagが格納されこちらでタグかカテゴリの判別がされている)
例:
以下のような1記事のレコードがあったとします。
// wp_posts(記事データ) * id = 1 * title = hoge // wp_term_relationship(記事に関連付けを行う) * object_id = 1(postの記事に紐づいてる) * term_taxonomy_id = 1 * object_id = 1 * term_taxonomy_id = 2 // wp_terms(カテゴリーとタグが格納されている) * term_id = 1 * name = 旅行 * slug = trip * term_id = 2 * name = フード * slug = food // wp_term_taxonomy(カテゴリーかタグか判断させるテーブル) * term_taxonomy_id = 1 * term_id = 1 * taxonomy = post_tag * term_taxonomy_id = 2 * term_id = 2 * taxonomy = post_tag
以上のレコードを取得してダンプしますと、
postsが1であるのに、カテゴリーが2つ存在するため、配列が2つに分かれてしまいます。