J'ai un type de message personnalisé appelé game_go
et une taxonomie appelée game_go_series
. Quelques exemples de termes sont chase
, compete
, victory
, etc. J'ai un fichier appelé taxonomy-game_go_series
qui affiche uniquement les publications sous forme paginée d'un termeindividual.
La deuxième page que je veux créer doit afficherallles messages de ce terme. En d'autres termes, il y aurait deux pages qui ont le même terme.
De plus, et c'est important, je sais comment faire cela en utilisant le terme dans le nom du fichier (par exemple, taxonomy-game_go-chase.php
), mais comme nous ajouterons plus de termes, il deviendra difficile de créer un fichier modèle à chaque fois. .
Y a-t-il un moyen de faire cela en créant automatiquement des pages par taxonomie de termes lorsque nous ajoutons de nouveaux termes?
Faites-moi savoir si je peux fournir des éclaircissements supplémentaires. Merci!
Cette méthode la configurera de sorte que si vous ajoutez/all à la fin de vos archives de taxonomie, toutes les publications seront affichées.
Tout d’abord, lors de l’enregistrement de la taxonomie, assurez-vous de définir le ep_mask
sur EP_CATEGORIES
. Cela signifie que nous pouvons lui ajouter un point de terminaison personnalisé.
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' );
Ne copiez pas tout ce code, mais assurez-vous de bien faire la chose ep_mask
dans votre code, car il n'est probablement pas déjà défini de cette façon.
Pour ajouter ep_mask
aux taxonomies générées par l'interface utilisateur des types de publication personnalisés, procédez comme suit:
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 );
Créez ensuite le noeud final all
rewrite dans le masque EP_CATEGORIES
.
function wpse_277843_all_endpoint() {
add_rewrite_endpoint( 'all', EP_CATEGORIES );
}
add_action( 'init', 'wpse_277843_all_endpoint' );
Cela signifie que le noeud final sera également valide pour les catégories, mais que nous pourrons les ignorer ultérieurement pour tout comportement personnalisé. Malheureusement, l'ajout de points de terminaison uniquement à une taxonomie personnalisée semble être impossible pour le moment. Cela signifie simplement que le passage à /category/category-name/all
ne lancera pas un 404. Le /all
sera simplement ignoré (ou vous pouvez appliquer le même comportement pour les catégories, si vous le souhaitez).
Ensuite, dans pre_get_posts
, si le point de terminaison all
est utilisé dans votre taxonomie personnalisée, définissez posts_per_page
sur -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' );
Vous pouvez ensuite ajouter un lien vers votre modèle vers la version/all, si vous vous trouvez déjà dans une archive de taxonomie et si ce n'est pas déjà la version/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; ?>