Metodo corretto per creare una pagina di destinazione o archivio per i custom post type

17 giu 2015, 20:08:41
Visualizzazioni: 14.6K
Voti: 6

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?

1
Commenti

archive-cpt.php dove cpt è il nome del tuo custom post type

Brad Dalton Brad Dalton
17 giu 2015 20:11:16
Tutte le risposte alla domanda 2
0

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.

17 giu 2015 20:38:43
0

Vorrei...

  1. Creare un CPT registrato con 'has_archive' => false e usarlo come sorgente per il "contenuto modificabile".
  2. Oppure usare una semplice "Pagina" se preferisci
  3. 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".
17 giu 2015 20:22:38