it-swarm.com.de

Richtige Methode zum Erstellen einer benutzerdefinierten Zielseite oder Archivseite für Posts

Ich hatte immer Probleme beim Erstellen von Archiven oder Landing Pages für benutzerdefinierte Beitragstypen und wollte wissen, wie andere damit umgehen.

Wenn ich eine Zielseite für einen benutzerdefinierten Beitragstyp haben möchte, möchte ich jedoch, dass die Archivseite bearbeitbaren Inhalt enthält (d. H. Eine physische Seite ist). Ich muss eine benutzerdefinierte Vorlage für meine Archivseite erstellen. Dieses Problem besteht darin, dass für diese Seite keine Beziehung zum benutzerdefinierten Beitragstyp besteht. Also muss ich jetzt archive auf false und die Rewrite-Regel auf den Slug des benutzerdefinierten Post-Typs einstellen. Auch wenn Sie eine einzelne Seite eines benutzerdefinierten Beitragstyps anzeigen, weiß das Menü nicht, ob die benutzerdefinierte Zielseite aktiv ist.

Hat jemand eine logische Lösung dafür?

4
hyperdrive

In dieser Situation erstelle ich eine benutzerdefinierte Seitenvorlage, z. B. tpl-archive-page.php. Mit Erweiterte benutzerdefinierte Felder und Auswahlfeld für den Beitragstyp (*) kann der Benutzer beispielsweise einen Beitragstyp auswählen, zu dem eine Verbindung hergestellt werden soll.

<?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();

Die Option has_archive muss bei der Registrierung des benutzerdefinierten Beitragstyps auf false gesetzt sein.


(*) Wenn Sie ACF5/Pro verwenden, betrachten Sie this fork des Feldes.

2
luke

Ich würde...

  1. Erstellen Sie einen bei 'has_archive' => false registrierten CPT und verwenden Sie diesen als Quelle für "bearbeitbaren Inhalt".
  2. Oder verwenden Sie eine einfache "Seite", wenn Sie es vorziehen
  3. Erstellen Sie dann archive-{cpt-name}.php im Design und fragen Sie in dieser Vorlage nach den CPT-Inhaltsdaten oder den "Seite" -Daten.
0
s_ha_dum