Metodă corectă de creare a paginii de destinație sau a paginii de arhivă pentru tipurile personalizate de postări
Mereu am probleme la crearea paginilor de arhivă sau de destinație pentru tipurile personalizate de postări și am vrut să aflu cum abordează alții această problemă.
Dacă vreau să am o pagină de destinație pentru un tip personalizat de postări, dar vreau ca pagina de arhivă să conțină conținut editabil (adică să fie o pagină fizică). Va trebui să creez un șablon personalizat pentru pagina mea de arhivă. Problema cu aceasta este că nu există nicio legătură între această pagină și tipul personalizat de postări. Așa că acum trebuie să dezactivez arhiva și să setez regula de rescriere să corespundă slug-ului tipului de postare personalizat. De asemenea, când vizualizez o pagină individuală a tipului de postare personalizată, meniul nu știe că pagina de destinație personalizată este activă.
Are cineva o soluție logică pentru asta?
Pentru această situație, creez un șablon personalizat de pagină, de exemplu tpl-archive-page.php
.
De exemplu, folosind Advanced Custom Fields și Post Type Selector Field(*) utilizatorul poate alege un tip de postare pentru a se conecta.
<?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();
Opțiunea has_archive
la înregistrarea tipului de postare personalizat trebuie setată la false
.
(*) Dacă utilizați ACF5/Pro, luați în considerare acest fork al câmpului.

Aș...
- Crea un CPT (Custom Post Type) înregistrat cu
'has_archive' => false
și l-aș folosi ca sursă pentru "conținut editabil". - Sau aș folosi o simplă "Pagină" dacă prefer
- Apoi aș crea
archive-{nume-cpt}.php
în tema și aș interoga în acel șablon datele din CPT sau datele din "Pagină".
