web-dev-qa-db-ja.com

ページ付けされた用語アーカイブに「すべての投稿を表示」リンクを提供するにはどうすればよいですか。

私はgame_goというカスタム投稿タイプとgame_go_seriesという分類法を持っています。いくつかの例の用語はchasecompetevictoryなどです。私はindividualという用語のページ区切り形式で投稿のみを表示するtaxonomy-game_go_seriesというファイルを持っています。

私が作成したい2ページ目には、allその個々の用語の投稿を表示する必要があります。言い換えれば、同じ用語を持つ2つのページがあるでしょう。

また、これは重要です。ファイル名に用語(例:taxonomy-game_go-chase.php)を使用してこれを行う方法はわかりますが、用語を追加するので、毎回テンプレートファイルを作成しなければならないのは面倒です。

新しい用語を追加したときに用語分類によるページが自動的に作成されるようにする方法はありますか?

さらに明確にすることができたら教えてください。ありがとうございます。

2
bhood

この方法では、分類アーカイブの末尾に/ allを追加すると、すべての投稿が表示されるように設定されます。

まず、分類法を登録するときは、必ずep_maskEP_CATEGORIESに設定してください。これはカスタムエンドポイントを追加できることを意味します。

function wpse_277843_register_taxonomy() {
    register_taxonomy( 'game_go_series', 'game_go', array(
        'rewrite' => array(
            'slug'    => 'series',
            'ep_mask' => EP_CATEGORIES,
        ),
    ) );
}
add_action( 'init', 'wpse_277843_register_taxonomy' );

すべてのコードをコピーするのではなく、コード内でep_maskを実行するようにしてください。おそらくそのように設定されていないのでしょう。

カスタム投稿タイプUIで生成された分類法にep_maskを追加するには、次の手順に従います。

function wpse_277843_cptui_ep_mask( $args, $taxonomy_slug, $taxonomy_args ) {
    if ( 'game_go_series' == $taxonomy_slug ) {
        $args['rewrite']['ep_mask'] = EP_CATEGORIES;
    }

    return $args;
}
add_filter( 'cptui_pre_register_taxonomy', 'wpse_277843_cptui_ep_mask', 10, 3 );

次に、all書き換えエンドポイントをEP_CATEGORIESマスクに​​作成します。

function wpse_277843_all_endpoint() {
    add_rewrite_endpoint( 'all', EP_CATEGORIES );
}
add_action( 'init', 'wpse_277843_all_endpoint' );

これは、エンドポイントがカテゴリにも有効になることを意味しますが、後でカスタム動作を無視することもできます。残念ながら、カスタム分類法にのみエンドポイントを追加することは、現在不可能であると思われます。 /category/category-name/allに行っても404がスローされないことを意味します。/allは無視されるだけです(または、必要に応じてカテゴリに同じ動作を適用できます)。

次に、pre_get_postsで、カスタム分類法でallエンドポイントにアクセスする場合は、posts_per_page-1に設定します。

function wpse_277843_all_posts( $query ) {
    if ( $query->is_main_query() && $query->is_tax( 'game_go_series' ) ) {
        if ( isset( $query->query_vars['all'] ) ) {
            $query->set( 'posts_per_page', -1 );
        }
    }
}
add_action( 'pre_get_posts', 'wpse_277843_all_posts' );

その後、分類法アーカイブをすでに使用していて、まだ/ allバージョンでない場合は、テンプレートへのリンクを/ allバージョンに追加できます。

<?php if ( is_tax( 'game_go_series' ) && get_query_var( 'all', false ) === false ) : ?>
    <a href="<?php echo get_term_link( get_queried_object() ); ?>all/">
        Show All
    </a>
<?php endif; ?>
1
Jacob Peattie