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

Pocket

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

構造

パーマリンク

%category%/%post_id%.html

カスタム投稿タイプ

my_post

タクソノミー

| タクソノミー名 | ターム | テンプレート |
|——|—————|————————————|
| foo | foo1, foo2 | taxonomy-foo.php |
| bar | bar1, bar2 | なし |

fooアーカイブ(template-foo.php)のなかでbarで絞り込みをする。

流れ

taxonomy-foo.php

  1. 現在表示しているタクソノミーアーカイブ(foo1かfoo2)のURL取得
  2. 絞り込みリンク作成(barのタームをクエリ文字に追加)
  3. 追加クエリを取得してクエリを実行

1 現在表示しているタクソノミーアーカイブURL取得

global $wp_query;

$current      = $wp_query->get_queried_object();
$current_link =  get_term_link( $current->slug, $current->taxonomy );

2. 絞り込みリンク作成

$terms = get_terms( array( 'bar' ), array( 'orderby' => 'count', 'order' => 'DESC' ) );

if ( ! empty( $terms ) ) {
    foreach ( $terms as $term ) {
        $query = array(
            $term->taxonomy => $term->slug
        );
        $filter_link = add_query_arg( $query, $current_linkl );
        echo '<a  href=“' . esc_url( $filter_link ) . '“>' . esc_html( $term->name ) . '</a> ';
    }
}

3 追加クエリを取得してクエリを実行

// ページネイト
if ( get_query_var( 'paged' ) ) {
    $paged = get_query_var( 'paged' );
} elseif ( get_query_var( 'page' ) ) {
    $paged = get_query_var( 'page' );
} else {
    $paged = 1;
}

// fooタクソノミー項目取得
$tax_args = array(
    array(
        'taxonomy' => 'foo',
        'field'    => 'slug',
        'terms'    => $current->slug
    )
);

// barタクソノミー項目取得
$bar = get_query_var( 'bar' );
if ( ! empty( $bar ) ) {
    array_push(
        $tax_args,
        array(
            'taxonomy' => 'bar',
            'field'    => 'slug',
            'terms'    => $bar
        )
    );
}

// クエリ作成
$args = array(
    'post_type'      => 'my_post',
    'tax_query'      => $tax_args,
    'posts_per_page' => 18,
    'paged'          => $paged
);

$my_query = new WP_Query( $args );

// ループ処理
if ( $my_query->have_posts() ) {

}

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。