こんにちは。
前回、メディアライブラリからすべての画像の取得する方法を教えて頂いて、実装することが出来たのですが、
複数のカテゴリーから投稿すると余計なものまで取得して表示されることがわかりました。
http://ja.forums.wordpress.org/topic/11191?replies=10
の続きですかね。
「複数のカテゴリーから投稿する」との意味が分かりません。
前回私が提示したコードは「投稿」に使われているかどうかに関わらず、
メディアライブラリに登録されている画像すべてを対象にしています。
現在のコードや、どのような挙動(抽出条件)にしたいのか、
また、表示したい場所(テンプレートやHOMEなど)を
具体的に提示してもらわないと回答のしようがないです。
質問しておきながら、返信遅がくなり申し訳ございません。
gatespaceさん
そうです。
http://ja.forums.wordpress.org/topic/11191?replies=10
の続きです。
質問の内容がわかりにくくてご迷惑お掛けしました。
「複数のカテゴリーから投稿する」ではなく、
「特定のカテゴリーに投稿されてメディアファイルに登録されている、そのカテゴリーのすべての画像ファイルを取得したい」ということです。
新規カテゴリーを追加で
カテゴリーA、カテゴリーB、カテゴリーCの3つを作成し、
新規投稿を追加でカテゴリーAに投稿、
新規投稿を追加でカテゴリーBに投稿、
新規投稿を追加でカテゴリーCに投稿します。
抽出条件は、カテゴリーCに投稿されてメディアファイルに登録されている、カテゴリーCのすべての画像ファイルです。
表示したい場所は、テンプレートとして作成したphotos.phpです。
現在のコード以下内容で、カテゴリー指定の部分がわからない状態です。
<?php
$args = array(
'post_type' => 'attachment',
'numberposts' => -1,
'post_status' => null,
'post_mime_type' => 'image/jpeg' // ファイルタイプが/jpeg画像のみ
);
$attachments = get_posts( $args );
if ( $attachments ) { // 該当する投稿があったら
echo '<ul>';
foreach ( $attachments as $attachment ) :
echo '<li><a href="'.wp_get_attachment_url($attachment->ID).'" rel="img_group">';
echo wp_get_attachment_image( $attachment->ID, array(80,80) ); // サイズを80px*80pxに
echo '</a></li>';
endforeach; // 投稿のループ終わり
echo '</ul>';
}
wp_reset_postdata(); // 取得したデータのリセット
?>
「カテゴリー」はあくまでも「投稿」に紐づけられる情報であって、
その投稿に紐づけられたメディアにまで紐づけられません。
よって、投稿のカテゴリーを基にメディアを抽出するのは難しいと思います。
ただし、メディア自体にカスタム分類を追加することは可能です。
運用上メディアのアップロード時にターム(カテゴリー)を登録する手間は増えてしまいますが、希望通りの表示は可能かと思います。
参照
・メディアのカテゴライズ(前編)
・メディアのカテゴライズ(後編)
以下のコードは未検証ですけど、こんな感じのコードになるんじゃないかな。
二重ループでget_posts()してるんで環境によっては落ちるかもしれないけど。
/**
* 特定のカテゴリーに紐づく投稿の添付ファイルをすべて表示
* @param int $cat カテゴリーIDを指定
* @return void
*/
function display_attachment_category($cat) {
$args = array(
'post_type' => 'post',
'numberposts' => -1,
'cat' => $cat,
);
$posts = get_posts($args);
foreach($posts as $post) {
$attachment_args = array(
'post_type' => 'attachment',
'numberposts' => -1,
'post_status' => null,
'post_mime_type' => 'image/jpeg',
'post_parent' => $post->ID,
);
$attachments = get_posts($attachment_args);
if ( $attachments ) { // 該当する投稿があったら
echo '<ul>';
foreach ( $attachments as $attachment ) :
echo '<li><a href="'.wp_get_attachment_url($attachment->ID).'" rel="img_group">';
echo wp_get_attachment_image( $attachment->ID, array(80,80) ); // サイズを80px*80pxに
echo '</a></li>';
endforeach; // 投稿のループ終わり
echo '</ul>';
}
}
}