私はgame_go
というカスタム投稿タイプとgame_go_series
という分類法を持っています。いくつかの例の用語はchase
、compete
、victory
などです。私はindividualという用語のページ区切り形式で投稿のみを表示するtaxonomy-game_go_series
というファイルを持っています。
私が作成したい2ページ目には、allその個々の用語の投稿を表示する必要があります。言い換えれば、同じ用語を持つ2つのページがあるでしょう。
また、これは重要です。ファイル名に用語(例:taxonomy-game_go-chase.php
)を使用してこれを行う方法はわかりますが、用語を追加するので、毎回テンプレートファイルを作成しなければならないのは面倒です。
新しい用語を追加したときに用語分類によるページが自動的に作成されるようにする方法はありますか?
さらに明確にすることができたら教えてください。ありがとうございます。
この方法では、分類アーカイブの末尾に/ allを追加すると、すべての投稿が表示されるように設定されます。
まず、分類法を登録するときは、必ずep_mask
をEP_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; ?>