メディア画像の表示をforループで表現したい
-
制作目標は、
タクソノミーでカテゴリ分けされたメディアの最新画像を1枚表示し、
それらをカテゴリの更新順に並べ替えることです。
(参照:WPでカテゴリを投稿の新しい順に並べ替える)一般的にメディア画像一覧表示などにはforeachループを使うようですが、
今回「カテゴリ別」「更新順」という条件があるためforループで表現したいです。
しかし下記のコードではうまくいかずとても困っています。問題点を探るため、一度forループを外してprint_rでひとつずつ要素を調べた所
10行目のget_posts関数で値をまったく取得できていないようなのです。
原因がつかめず、他の関数を当てはめようにもわからない状況です。
どうか解決策やヒントだけでもご助力いただけませんでしょうか。<!--function.php--> <?php //更新順・カテゴリー別アタッチメント表示方法 function get_taxs_and_sort() { $taxs = get_terms( 'attachment_category', 'get=all' ); // 特定のタクソノミーにあるカテゴリをすべて読み込む $count = count($taxs); // カテゴリの数を得る for ($i = 0; $i < $count; $i++) { // カテゴリの数だけ繰り返す // 各カテゴリの最も新しい投稿を読み込む $where = array('attachment_category' => $taxs[$i]->term_id, 'orderby' => 'post_date', 'post_type' => 'attachment', 'order' => 'desc', 'numberposts' => 1); $newest_atms = get_posts($where); //■ここが機能しない■ // カテゴリのオブジェクトに「newest_atm」というメンバを追加して、最新の投稿を代入する $taxs[$i]->newest_atm = $newest_atms[0]; } // カテゴリを、最新の投稿の日付が新しい順に並べ替える usort($taxs, 'sort_by_postdate'); // 結果を返す return $taxs; } function sort_by_postdate($a, $b) { // 2つのカテゴリの最新の投稿(newest_atmメンバ)の日付の大小関係を返す return ($a->newest_atm->post_date == $b->newest_atm->post_date) ? 0 : ($a->newest_atm->post_date < $b->newest_atm->post_date) ? 1 : -1; } ?>
念のため、カスタム固定ページテンプレートのコードも載せておきます。
<?php $taxs = get_taxs_and_sort(); // カテゴリーと各カテゴリーの最新投稿を取得 $count = count($taxs); // カテゴリの数を得る for($i=0; $i<$count; $i++) : // カテゴリの数だけ繰り返す ?> <li class="photo-list"> <?php //最新の投稿に関する情報を準備しておく $post = $taxs[$i]->newest_atm; setup_postdata($post); //最新の投稿画像を呼び出せるようにしておく $img = wp_get_attachment_image_src( $newest_atms[$i]->ID, '' ); ?> <!--メインコンテンツ--> <?php echo $taxs[$i]->name ?>(<?php echo get_the_date(); ?>)<br /> <?php the_title(); ?>(<?php echo get_the_date(); ?>)<br /> <?php echo '<a href="' . $img[0] . '">'; echo wp_get_attachment_image( $newest_posts[0]->ID, 'thumbnail' );; echo '</a>'; ?> </li> <?php endfor; ?>
2件の返信を表示中 - 1 - 2件目 (全2件中)
2件の返信を表示中 - 1 - 2件目 (全2件中)
- トピック「メディア画像の表示をforループで表現したい」には新たに返信することはできません。