web-dev-qa-db-fra.com

Méthode appropriée pour créer une page de destination ou une page d'archive de type publication personnalisée

Je rencontre toujours un problème avec la création d’archives ou de pages de destination pour des types de publication personnalisés et je voulais savoir comment les autres traitaient cela.

Si je veux avoir une page d'arrivée pour un type de publication personnalisé, je souhaite cependant que la page d'archive contienne un contenu modifiable (c'est-à-dire une page physique). Je devrai créer un modèle personnalisé pour ma page d'archive. Ce problème avec ceci est qu'il n'y a aucune relation de cette page avec le type d'article personnalisé. Alors maintenant, je dois définir archive sur false et la règle de réécriture pour correspondre au slug du type de publication personnalisé. De même, lors de l'affichage d'une seule page de type publication personnalisée, le menu ne sait pas que la page d'arrivée personnalisée est active.

Quelqu'un at-il une solution logique pour cela?

4
hyperdrive

Dans ce cas, je crée un modèle de page personnalisé, à savoir tpl-archive-page.php. Par exemple, en utilisant Champs personnalisés avancés _ et le Champ de sélecteur de type de publication (*), l'utilisateur peut choisir un type de publication auquel se connecter.

<?php
/**
 * Template Name: CPT Archive Page
 */

get_header();

while (have_posts()) :

    the_post();

    get_template_part('content', 'page');

    $archive_query_post_type = get_post_meta(get_queried_object_id(), 'cpt_archive_query_post_type', true);

    if( $archive_query_post_type && is_string($archive_query_post_type) ) {
        $args = array(
            'post_type' => $archive_query_post_type,
            'posts_per_page'=> -1,
            'orderby'       => 'title',
        );

        $archive_query = new WP_Query( $args );

        if ( $archive_query->have_posts() ) {
            while ( $archive_query->have_posts() ) {
                $archive_query->the_post();
                get_template_part('content', get_post_type() );
            }
        }

        wp_reset_postdata();
    }

endwhile;

get_footer();

L'option has_archive lors de l'enregistrement du type de publication personnalisé doit être définie sur false.


(*) Si vous utilisez ACF5/Pro, considérez this fork du champ.

2
luke

Je voudrais...

  1. Créez un CPT enregistré avec 'has_archive' => false et utilisez-le comme source de "contenu éditable".
  2. Ou utilisez une simple "page" si vous préférez
  3. Créez ensuite archive-{cpt-name}.php dans le thème et interrogez dans ce modèle les données de contenu CPT ou les données "Page".
0
s_ha_dum