Metodo corretto per creare una pagina di destinazione o archivio per i custom post type
Mi imbatto sempre in problemi quando devo creare pagine di archivio o di destinazione per i custom post type e vorrei sapere come li affrontano gli altri.
Se voglio avere una pagina di destinazione per un custom post type, ma desidero che la pagina di archivio contenga contenuti modificabili (cioè sia una pagina fisica). Dovrò creare un template personalizzato per la mia pagina di archivio. Il problema è che non c'è alcuna relazione tra questa pagina e il custom post type. Quindi devo impostare archive su false e la rewrite rule in modo che corrisponda allo slug del custom post type. Inoltre, quando visualizzo una pagina singola del custom post type, il menu non riconosce che la pagina di destinazione personalizzata è attiva.
Qualcuno ha una soluzione logica per questo?
Per questa situazione, creo un modello di pagina personalizzato, chiamato ad esempio tpl-archive-page.php
.
Utilizzando ad esempio Advanced Custom Fields e il Post Type Selector Field(*) l'utente può scegliere un tipo di post da collegare.
<?php
/**
* Template Name: Pagina Archivio CPT
*/
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'opzione has_archive
durante la registrazione del custom post type deve essere impostata su false
.
(*) Se stai usando ACF5/Pro, considera questo fork del campo.

Vorrei...
- Creare un CPT registrato con
'has_archive' => false
e usarlo come sorgente per il "contenuto modificabile". - Oppure usare una semplice "Pagina" se preferisci
- Poi creare
archive-{cpt-name}.php
nel tema e fare una query in quel template per i dati del CPT del contenuto, o per i dati della "Pagina".
