<補足>
カスタム投稿「店舗」
タクソノミー「料理」
ターム「うどん」「そば」…
という具合で作成しました。
アイデアだけですが…
- 画像(メディア)にタクソノミー「料理」が付けられるようにする。
- うどん画像にターム「うどん」、そば画像にターム「そば」を付ける。
- 店舗の投稿に、うどん/そば両方の画像を貼る(アイキャッチ画像でなくても構わないと思います)。
- ターム「うどん」のアーカイブテンプレート(taxonomy-ryouri-udon.php)は、投稿に貼られた画像のうちターム「うどん」が付いている画像を取得してサムネイル表示する。
- ターム「そば」のアーカイブテンプレート(taxonomy-ryouri-soba.php)も同様にする。
「投稿に貼られた画像のうちターム何々が付いている画像」は get_children で取得できると思います。get_children は get_posts と同じく tax_query 引数が使えるので。
こんにちは、
@gblsm さんの提案にあるように、画像に、メタデータを追加して、それらを事前に体系立てて表示を自動化する方法は出来上がると、作業者が何もすることがなくなるのでとても効率的だと思います。
一方で、最初からそれらの設計ができない。(途中から、いろんなのが発生してくるとか、)という場合もあるかもしれません。
場当たり的にやっていくような場合は、以下のようなフィルタを用意して置くと、投稿の作成ごとの手間が増えますが、作りは、簡単になります。
普通の投稿の場合ですが、
以下の例は、投稿に
カスタムフィールド
aciform_post_thumbnail(投稿スラッグ+_post_thumbnail)
値には、画像URL
カテゴリの指定は必須(上の例だと、aciform)
デフォルトの、アイキャッチ画像は必須。
functions.php に以下を追加
<?php
add_filter( 'post_thumbnail_html', 'change_thumbnail_by_category', 10, 5 );
function change_thumbnail_by_category( $html, $post_id, $post_thumbnail_id, $size, $attr ) {
$cat_id = get_query_var( 'cat' );
$term = get_term( $cat_id, 'category' );
if ( is_category() && in_the_loop() ) {
$url = get_post_meta( $post_id, $term->slug. '_post_thumbnail', true );
if ( !empty($url) ) {
$url = esc_url( $url );
return preg_replace( '!src="([^"]+)"!', 'src="' . $url . '"', $html );
}
}
return $html;
}
?>
in_the_loop()というコンディショナルは、サイドバーなどで利用されるアイキャッチ画像迄変更されることを、抑制する狙いですが、それぞれのテーマで挙動が異なるかもしれないので、適宜変更してください。
皆様ありがとうございました。
なんとかやれそうです。