Forma correcta de crear una página de destino o archivo para tipos de contenido personalizados
Siempre tengo problemas al crear páginas de archivo o de destino para tipos de contenido personalizados y quería saber cómo lo manejan otros.
Si quiero tener una página de destino para un tipo de contenido personalizado, pero necesito que la página de archivo contenga contenido editable (es decir, que sea una página física). Necesitaré crear una plantilla personalizada para mi página de archivo. El problema con esto es que no hay relación entre esta página y el tipo de contenido personalizado. Entonces necesito configurar archive como false y la regla de rewrite para que coincida con el slug del tipo de contenido personalizado. Además, al ver una página individual del tipo de contenido personalizado, el menú no sabe que la página de destino personalizada está activa.
¿Alguien tiene una solución lógica para esto?
Para esta situación, creo una plantilla de página personalizada, por ejemplo tpl-archive-page.php
.
Por ejemplo, usando Advanced Custom Fields y el Post Type Selector Field(*) el usuario puede seleccionar un tipo de contenido para conectar.
<?php
/**
* Plantilla: Página de Archivo 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();
La opción has_archive
al registrar el tipo de contenido personalizado debe establecerse en false
.
(*) Si estás usando ACF5/Pro, considera esta versión modificada del campo.

Yo haría...
- Crear un CPT (Custom Post Type) registrado con
'has_archive' => false
y usarlo como fuente de "contenido editable". - O usar una simple "Página" si lo prefieres
- Luego crear
archive-{nombre-del-cpt}.php
en el tema y consultar en esa plantilla los datos del CPT de contenido, o los datos de la "Página".
