2015年1月20日火曜日

wordpressにて、$wpdb使って直接諸々引っ張ってくる的なお話

  • このエントリーをはてなブックマークに追加

wordpressでプラグインの作成とかでもいいし、普通にテンプレート内で表示するでもいいんだけど、
意外とquery_postsとかWP_queryとか使っても案外取りづらいものがあったりするので、
そういった場合に$wpdbクラス使って直接引っ張ってくる方法が便利だったりする。

とはいっても自分は簡易的なプラグインを作ったからその中で使っただけだけど。
けどうまくすれば中々に良さそうな感じな気がするみたいな。

ってことで今日はそのお話をば。

$custom_filed_name = "METANAME";
$post_type = "hogehoge";
$term_slug = "taxonomy-slug";

$query = "SELECT posts.ID,posts.post_title,pm.meta_value FROM {$wpdb->posts} as posts
  LEFT JOIN {$wpdb->term_relationships} as t_rel ON posts.ID = t_rel.object_id
  LEFT JOIN {$wpdb->term_taxonomy} as t_term_tx ON t_rel.term_taxonomy_id = t_term_tx.term_taxonomy_id
  LEFT JOIN {$wpdb->terms} as t_terms ON t_term_tx.term_id = t_terms.term_id
  LEFT JOIN {$wpdb->postmeta} as pm ON pm.post_id = posts.ID AND pm.meta_key = '{$custom_filed_name}'
  WHERE posts.post_status = 'publish'
  AND posts.post_type = '{$post_type}'
  AND t_terms.slug = '{$term_slug}'";

$results = $wpdb->get_results($query, ARRAY_A);
こんな感じ。
とりあえずこのquery文は記事ID・記事タイトル・指定したカスタムフィールドの値を引っ張ってくる的な。
LEFT JOINでカスタムフィールドをくっつけてるので、カスタムフィールドに値が入ってないと検索から出てこないから注意的な。

で、これを更に加工すれば条件にあった投稿のカスタムフィールドを一括更新するとかそういったことも可能になる。

ってことで標準のquery_postsなりWP_queryなりとかを使わずに、直接引っ張ってくると実はかなりカスタマイズ出来そうな的な。
とはいってもこういうのってぶっちゃけあまり使わずに出来るからwordpressって逆にすごいのかなと思う的なみたいな。

Adsense