システム開発・構築の神様

新しいサービスや技術を使った開発や構築。その他不具合解決など

WordPressのメディア管理でattachment画像に付けたタグだけを件数とともに取得する

楽をしてはいけないという結果です。

functions.phpに下記のregister_taxonomy_for_object_typeコードを追加するだけで、メディアの画像にもカテゴリーやタグを設置できるようになります。

(デフォルトでONでも良さそうなんですけどね)

// メディア管理にカテゴリー項目を追加

register_taxonomy_for_object_type( ‘category’, ‘attachment’ );

// メディア管理にタグ項目を追加

register_taxonomy_for_object_type( ‘post_tag’, ‘attachment’ );

で何が問題かと言うと

上記の設定では通常記事の投稿タグ名(post_tag)と、メディアの投稿タグ名が同じものなため、検索時にメディアのタグだけを取得したいときに、Wordpressの標準機能(関数)では、それが出来ないことです。

運用前に、ちゃんと記事のタグとメディアのタグを分けて運用した方が、後々融通がききそうですね。

今回は、手を抜いてしまったので共通のタグで運用しています。。。

ただ、手抜き仕様でもメディアのタグだけを取得する方法もあります。

強引ですが直接オリジナルのSQL文(MySQL)を発行する方法で、なんとか対応することができました。

// メディア管理のタグを件数と共に取得する

SELECT wp_terms.name, count(*) AS count FROM wp_posts
LEFT JOIN wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id
LEFT JOIN wp_term_taxonomy ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
LEFT JOIN wp_terms ON wp_terms.term_id = wp_term_taxonomy.term_id
WHERE wp_posts.post_type= ‘attachment’
GROUP BY wp_terms.name
ORDER BY count DESC

JOIN結合の連発なので、速度的に遅いのかも?そんな心配もありましたが、一応1万程度のタグでも、1秒以内で取得することができます。

取得後は、通常のループで回せばOKです。

あまりこの手のメディアの使い方は需要はなさそうですが・・・

関連記事