web-dev-qa-db-ja.com

現在のカテゴリリンクフィルタ

私のテーマには、分類法のアーカイブテンプレート(taxonomy-cat_projet.php)があります。このテンプレートには、分類法を選択するための分類法リンクのリストがあります。これは私がカテゴリリンクをリストするのに使っているコードです:

<ul>
    <?php  $args = array( 
            'title_li' => '',
            'taxonomy' => 'cat_projet',
            'hide_empty' => false,
    );
    wp_list_categories( $args ); ?>
</ul>

カテゴリが選択されるとそのリンクが変わり、クリックするとすべてのカテゴリの投稿が一覧表示されるようになります。最初のクリックでそのカテゴリがアクティブになり、2回目のクリックで非アクティブになります。

私はJavaScriptでそれを行うことができることを知っているが、私はそれが存在する場合、いくつかの "現在の分類法のリンク"フィルタを使用するようなphpでそれをすることを好む。

1
Badr

内部的にwp_list_categories()は用語のURLにget_term_link()を使います。この関数はterm_linkフィルタを使ってフィルタリングすることができますので、現在の用語へのリンクをフィルタリングして、投稿タイプのアーカイブへのリンクに置き換えることができます。

function wpse_307202_term_link( $termlink, $term, $taxonomy ) {
    if ( is_tax( 'cat_projet' ) ) {
        if ( get_queried_object_id() === $term->term_id ) {
            $termlink = get_post_type_archive_link( 'post_type_name' );
        }
    }

    return $termlink;
}
add_filter( 'term_link', 'wpse_307202_term_link', 10, 3 );
1
Jacob Peattie