web-dev-qa-db-fra.com

Comment puis-je fournir un lien "afficher tous les messages" dans une archive de termes paginée?

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!

2
bhood

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; ?>
1
Jacob Peattie