###前提・実現したいこと
お世話になります。
Wordpressで、カテゴリーをタブで切り替え、タグをチェックボックスで絞込みしたいと思っております。
カテゴリーをタブで切り替えする方法はわかるのですが、タグをチェックボックスで絞込みがうまくいきません。
参考イメージ(トップのニュース一覧):http://www.sanda.or.jp/
今回はカスタム投稿「チラシ:flyer」を作成しました。
ターム:お知らせ:notice、イベント:event(flyer_cat)
春:spring、夏:summer(flyer_tag)
もっと良いやり方があるのであれば、ご教授いただければ幸いですが、
JQでclassをつけることで、チェックボックスの絞込みができるものを見つけたので、
その方法で春のタームが表示されるときは、liにspringのクラスがついて表示されるような流れで考えています。
###発生している問題・エラーメッセージ
PHPのif条件がうまくいっていないのか、
最後の <li class="spring summer">しか表示されません。
もし、タームに春がついているときは<li class="spring">を表示、
タームに夏がついているときは、<li class="summer">を表示、
タームに春、夏がついているときは <li class="spring summer">を表示する形にしたいです。
php
1 2 3<!-- 絞込み要素選択ここから --> 4<div id="select"> 5 6 <!-- 絞り込まない(全表示)ボタン --> 7 <label class="selected"><input type="radio" id="all" checked="checked">絞り込まない</label> 8 9 <!-- 絞込みに使うタグをidとして指定します --> 10 <label><input type="checkbox" id="spring" class="sort">春</label> 11 <label><input type="checkbox" id="summer" class="sort">夏</label> 12 13</div> 14<!-- 絞込み要素選択ここまで --> 15 16 17<!-- 絞込まれる要素ここから --> 18<div id="result"> 19 20 <!-- 絞込みに使うタグをclassとして指定します --> 21 22 <ul> 23 <?php 24$goodslist = get_posts( array( 25 'post_type' => 'flyer', //特定のカスタム投稿タイプスラッグを指定 26 'taxonomy' => 'flyer_cat', //特定のカスタムタクソノミースラッグを指定 27 'term' => 'event', //特定のカスタムタクソノミー内のタームスラッグを指定 28 'posts_per_page' =>10//取得記事件数 29 )); 30foreach( $goodslist as $post ): 31setup_postdata( $post ); 32?> 33 <?php if (have_posts()): ?> 34 <?php while(have_posts()):the_post(); ?> 35 <?php $term = esc_html(get_post_type_object(get_post_type())->name); ?> 36 <?php if($term=='spring'): ?> 37 <li class="spring"> 38 <span class="samune"> 39 </span> 40 <span><?php echo get_the_term_list($post->ID, 'flyer_cat'); ?></span> 41 42 43 <?php 44 if ($terms = get_the_terms($post->ID, 'flyer_tag')) { 45 foreach ( $terms as $term ) { 46 $term_slug = $term -> slug; 47 echo ('<span class="') ; 48 echo esc_html($term_slug) ; 49 echo ('">') ; 50 echo esc_html($term->name) ; 51 echo ('</span>') ; 52 } 53 } 54?> 55 56 57 <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> 58 59 </li> 60 61 <?php elseif($term=='summer') : ?> 62 <li class="summer"> 63 <span class="samune"> 64 </span> 65 <span><?php echo get_the_term_list($post->ID, 'flyer_cat'); ?></span> 66 67 68 <?php 69 if ($terms = get_the_terms($post->ID, 'flyer_tag')) { 70 foreach ( $terms as $term ) { 71 $term_slug = $term -> slug; 72 echo ('<span class="') ; 73 echo esc_html($term_slug) ; 74 echo ('">') ; 75 echo esc_html($term->name) ; 76 echo ('</span>') ; 77 } 78 } 79?> 80 81 82 <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> 83 84 </li> 85 86 87 88 89 <?php else : ?> 90 <li class="spring summer"> 91 <span class="samune"> 92 </span> 93 <span><?php echo get_the_term_list($post->ID, 'flyer_cat'); ?></span> 94 95 96 <?php 97 if ($terms = get_the_terms($post->ID, 'flyer_tag')) { 98 foreach ( $terms as $term ) { 99 $term_slug = $term -> slug; 100 echo ('<span class="') ; 101 echo esc_html($term_slug) ; 102 echo ('">') ; 103 echo esc_html($term->name) ; 104 echo ('</span>') ; 105 } 106 } 107?> 108 109 110 <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> 111 112 </li> 113 <?php endif; ?> 114 <?php endwhile; ?> 115 116 117 <?php else : ?> 118 <p>ただいま準備中です。しばらくお待ちください。</p> 119 <?php endif; ?> 120 121 <?php wp_reset_postdata(); wp_reset_query(); ?> 122 123 124 125 <?php 126 endforeach; 127 wp_reset_postdata(); 128?> 129 </ul> 130 131 132 133 134</div> 135<!-- 絞込まれる要素ここまで -->
宜しくお願いいたします。
###試したこと追記
上記を下記のように修正したところ、
タームに春のみついているときは <li class="spring">
タームに夏のみついているときは、<li class="summer">を表示することができたのですが、
タームに春、夏 複数ついているときは <li class="spring">の条件式に当てはまってしまいます。
javascript
1 2 <ul> 3 <?php 4$goodslist = get_posts( array( 5 'post_type' => 'flyer', //特定のカスタム投稿タイプスラッグを指定 6 'taxonomy' => 'flyer_cat', //特定のカスタムタクソノミースラッグを指定 7 'term' => 'notice', //特定のカスタムタクソノミー内のタームスラッグを指定 8 'posts_per_page' =>10//取得記事件数 9 )); 10foreach( $goodslist as $post ): 11setup_postdata( $post ); 12?> 13 <?php if (is_object_in_term($post->ID, 'flyer_tag', 'spring')): ?> 14 15 <li class="spring"> 16 <span class="samune"> 17 </span> 18 <span><?php echo get_the_term_list($post->ID, 'flyer_cat'); ?></span> 19 <span><?php echo get_the_term_list($post->ID, 'flyer_tag'); ?></span> 20 <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> 21 22 </li> 23 24 <?php elseif (is_object_in_term($post->ID, 'flyer_tag', 'summer')): ?> 25 <li class="summer"> 26 <span class="samune"> 27 </span> 28 <span><?php echo get_the_term_list($post->ID, 'flyer_cat'); ?></span> 29 <span><?php echo get_the_term_list($post->ID, 'flyer_tag'); ?></span> 30 31 <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> 32 33 </li> 34 35 36 <?php elseif (is_object_in_term($post->ID, 'flyer_tag',array('spring','summer'))): ?> 37 38 <li class="spring summer"> 39 <span class="samune"> 40 </span> 41 <span><?php echo get_the_term_list($post->ID, 'flyer_cat'); ?></span> 42 <span><?php echo get_the_term_list($post->ID, 'flyer_tag'); ?></span> 43 44 45 46 <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> 47 48 </li> 49 <?php else : ?> 50 見つかりません。 51 52 <?php endif; ?> 53 54 <?php wp_reset_postdata(); wp_reset_query(); ?> 55 56 57 58 <?php 59 endforeach; 60 wp_reset_postdata(); 61?> 62 </ul> 63 64
回答1件
あなたの回答
tips
プレビュー