Blog

【WordPress】タクソノミーアーカイブを別のタクソノミーで絞り込む

2016/03/15

カスタム投稿 Wordpress

個人で制作中の「食!相模原」でタクソノミーの絞り込みを導入しました。

苦労の末、やっと完成したので備忘録として残します。

「レストラン・食堂」カテゴリ(タクソノミー)を路線・駅で絞り込みたいと思いました。

参考サイト
タクソノミーアーカイブを別のタクソノミーで絞り込む : WordPress

こちらを参考にして取得したタグがこちらです。

<?php
global $wp_query;
$current      = $wp_query->get_queried_object();
$current_link =  get_term_link( $current->slug, $current->taxonomy );

$terms = get_terms( array( 'mytaxonomy' ), array( 'orderby' => 'term_id', 'order' => 'DESC' ) );
$termchildren = get_term_children( $term_id, $taxonomy_name );

if ( ! empty( $terms ) ) {
        echo '<ul>';
    foreach ( $terms as $term ) {
        $query = array(
            $term->taxonomy => $term->slug
        );
        $filter_link = add_query_arg( $query, $current_linkl );

        echo '<li><a  href="' . esc_url( $filter_link ) . '">' . esc_html( $term->name ) . '</a></li>';
    }
        echo '</ul>';
}
?>

これで絞り込みはできるようになったのですが、
プラグインの「Category Order and Taxonomy Terms Order」で指定した通りに並んでいないことが分かりました。

一見、ランダムに見えたのですが、
親タームA-子タームA1 子タームB1 子タームC1 親タームB-子タームA2 子タームB2・・・・
という並びになってしまいました。

理想は
親タームA-子タームA1 子タームA2 子タームA3 親タームB-子タームB1 子タームB2・・・・
です。

このような並びを実現するために参考にしたのが下記サイトです。
get_categories、get_termsでカテゴリとタクソノミーのターム一覧の編集方法

こちらの参考サイトは検索用チェックボックスを表示するようにしていますので、
私の考えているものとは違います。
そこで余計なタグを取っ払って下記のようにしました。

<?php
global $wp_query;

$current      = $wp_query->get_queried_object();
$current_link =  get_term_link( $current->slug, $current->taxonomy );
//親タクソノミーの表示
$parents_object = get_terms( 'mytaxonomy',  array ( 'orderby' => 'term_order', 'order' => 'ASC', 'parent' => 0 ));
$termchildren = get_term_children( $term_id, $taxonomy_name );

if ( ! empty( $parents_object ) ) {
    foreach ( $parents_object as $parent ) {
        $query = array(
            $parent->taxonomy => $parent->slug,
        );
        $filter_link = add_query_arg( $query, $current_linkl );
        echo '<span><a href="' . esc_url( $filter_link ) . '">' . esc_html( $parent->name ) . '</a> -</span> ';

        //子タクソノミーの表示
        $children_object = get_terms ( "mytaxonomy", array ( 'orderby' => 'term_order', 'order' => 'ASC', 'parent' => $parent -> term_id ) );
        if ( ! empty ( $children_object ) ) {
            foreach ( $children_object as $child ) {
                $query = array(
                    $child->taxonomy => $child->slug,
                );
                $filter_link = add_query_arg( $query, $current_linkl );

                echo '<span><a href="' . esc_url( $filter_link ) . '">' . esc_html( $child->name ) . '</a></span> ';
            }
        }
    }
}
?>

完成したのがこちらのページです。
http://www.shokusagamihara.com/shop_genre/restaurants/

同様にお困りの方は、このソースをコピペして使ってください。

ゼヒトモ内でのプロフィール: ROCKSTREAMゼヒトモのホームページ作成・制作サービス仕事をお願いしたい依頼者と様々な「プロ」をつなぐサービス

カテゴリー

月間アーカイブ

MORE

ミュージシャンズ・プラザ

神社仏閣ホームーページ制作

ホームページ制作問合せ