Metodă corectă de creare a paginii de destinație sau a paginii de arhivă pentru tipurile personalizate de postări

17 iun. 2015, 20:08:41
Vizualizări: 14.6K
Voturi: 6

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?

1
Comentarii

archive-cpt.php unde cpt este numele tipului tău de postare personalizată

Brad Dalton Brad Dalton
17 iun. 2015 20:11:16
Toate răspunsurile la întrebare 2
0

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.

17 iun. 2015 20:38:43
0

Aș...

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