あるカテゴリ内の公開投稿を、付けられたタグの数で並べ替える


共起タグが表示できるようになったので、タグ数の少ないリストを見直して、必要に応じてタグを増やそうと思います。

そこで、list カテゴリに属する公開投稿を、投稿に付けられたタグの数が少ない順に並べて取り出そうとしたのですが、用意された関数では(やたらとループさせる以外に)うまい方法を見つけられず、SQL文を書いてみました。

カテゴリもタグもタクソノミーなので、category タクソノミーの list タームに関連付けられた投稿のそれぞれについて、関連付けられている post_tag タクソノミーのターム数をカウントします。日本語で書いてもSQLで書いてもややこしい。

SELECT p.ID, COUNT(tt2.term_taxonomy_id) AS count
FROM wp_posts AS p
JOIN wp_term_relationships AS r ON p.ID=r.object_id
JOIN wp_term_taxonomy AS tt ON r.term_taxonomy_id=tt.term_taxonomy_id AND tt.taxonomy='category'
JOIN wp_terms AS t ON tt.term_id=t.term_id AND t.name='list'
JOIN wp_term_relationships AS r2 ON p.ID=r2.object_id
JOIN wp_term_taxonomy AS tt2 ON r2.term_taxonomy_id=tt2.term_taxonomy_id AND tt2.taxonomy='post_tag'
WHERE p.post_status='publish' AND p.post_type='post'
GROUP BY p.ID
ORDER BY count ASC

5 までで list カテゴリーに関連付けられた投稿を取り出しています。6と7で、その投稿に関連付けられたタグを取り出し、投稿IDごとにカウントします。

Posted by

on

in category