【小技】各カテゴリーに属している記事を取得する方法

2013年3月28日

投稿記事が属しているカテゴリーを取得する方法ではなくて
各カテゴリーに属している投稿記事の取得の仕方の一部を書いてみます。

get_categories();
query_posts();
を使えば、カテゴリー別記事一覧を作ることが簡単にできます

違うやり方は、ないものかと思ってしまう方なので

get_results();を使うとすると基本形は、以下の感じになります。
関数リファレンス/wpdb_Class

SELECT
A.object_id,
C.term_id,
C.name,
posts.ID,
posts.post_title,
posts.post_content,
posts.guid
FROM
wp_term_relationships AS A,
wp_term_taxonomy AS B,
wp_terms AS C,
wp_posts as posts
WHERE
A.term_taxonomy_id = B.term_taxonomy_id
AND B.term_id = C.term_id
AND A.object_id = posts.id
AND B.taxonomy = 'category’
AND posts.post_status = 'publish’
ORDER BY C.term_id

各カテゴリーに属している公開状態が「公開」の記事が取得できます。
カテゴリーIDが小さい順に並んでます。
記事が10件あって、それぞれ2個のカテゴリーに属していると
これで取得される件数は20件になります。

なので、親カテゴリーのみにしたい場合には

WHERE
A.term_taxonomy_id = B.term_taxonomy_id
AND B.term_id = C.term_id
AND A.object_id = posts.id
AND B.taxonomy = 'category’
AND posts.post_status = 'publish’
AND B.parent = 0
ORDER BY C.term_id

「AND B.parent = 0」を追加すれば、おkです。

特定のカテゴリーIDだけにしたい場合は

WHERE
A.term_taxonomy_id = B.term_taxonomy_id
AND B.term_id = C.term_id
AND A.object_id = posts.id
AND B.taxonomy = 'category’
AND posts.post_status = 'publish’
AND B.parent = 0
AND C.term_id = 1
ORDER BY C.term_id

とすれば、親カテゴリーで、かつカテゴリーIDが1に属している記事が全件取得できます。

ここからは、応用のような余談ですが
人気記事一覧を表示させてくれるプラグインが多々あると思います
そのようなプラグインは、たいていメタデータテーブルに情報を格納しています。
なので、その情報を使えば

各カテゴリーに属している記事を人気順で表示させることもできます。

SELECT
A.object_id,
C.term_id,
C.name,
posts.ID,
posts.post_title,
posts.post_content,
posts.guid,
D.meta_value
FROM
wp_term_relationships AS A,
wp_term_taxonomy AS B,
wp_terms AS C,
wp_postmeta AS D,
wp_posts as posts
WHERE
A.term_taxonomy_id = B.term_taxonomy_id
AND B.term_id = C.term_id
AND D.post_id = posts.ID
AND A.object_id = posts.id
AND B.taxonomy = 'category’
AND posts.post_status = 'publish’
AND D.meta_key = 'Views’
ORDER BY C.term_id, D.meta_value +0 desc

AND D.meta_key = 'Views’の 'Views’ は、プラグインによって変わるので、ご注意を

本ページはアフィリエイトプログラムによる収益を得ています

小技集

Posted by 管理人