投稿一覧(category.phpやtaxnomy.php)で、カスタムタクソノミーで絞り込み表示できるようにします。
まずは、絞り込みのための一覧を表示します。
get_terms()で、カスタムタクソノミーの一覧を取得できます。
たとえば、get_terms(‘howto_category’,’orderby=slug’) とすれば、howto_categoryというカスタムタクソノミーをslug順で並べて取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $mycats = get_terms('howto_category','orderby=slug'); ?> <?php if(count($mycats)>0) : ?> <div class="howto_cat"> <p>クリックすると絞り込みます。</p> <?php foreach($mycats as $mycat): ?> <?php if (($myca -> count) >0): ?> <a href="<?php echo $thisPageURL.'?howto_cat='.$mycat -> slug; ?>"> <?php echo esc_html($mycat -> name); ?></a> <?php endif; ?> <?php endforeach; ?> </div> <?php endif; ?> |
で、URLにGETパラメータをつけておいて、そのリンクをクリックすると、そのパラメータで絞り込み。
get_query_var(‘paged’)で、現在のページを取得して、query_postsで取得。
1 2 3 4 5 6 |
<?php if (isset($_GET['howto_cat'])) : $paged = get_query_var('paged'); $query_str = 'post_type=post&paged=' . $paged;> $query_str .= '&howto_category=' . htmlentities($_GET['howto_cat'], ENT_QUOTES, "utf-8"); query_posts($query_str); endif; ?> |
だがしかし。ほんとうは、pre_get_posts でやるべきところですので、function.phpあたりに、以下を。(pre_get_posts使うのなら、上記のコードquery_posts()はいりません。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
function my_posts_per_page($query) { if( is_admin() || ! $query->is_main_query() ){ return; } if ( $query->is_category('howto') ) { if (isset($_GET['howto_cat'])) { $howto_cat = htmlentities($_GET['howto_cat'], ENT_QUOTES, "utf-8"); $taxquery = array( array( 'taxonomy' => 'howto_category', 'field' => 'slug', 'terms' => array( $howto_cat ) ) ); $query->set( 'tax_query' , $taxquery ); } return; } } add_action( 'pre_get_posts', 'my_posts_per_page' ); |
以上