Mischen von benutzerdefinierten Beitragstypen und Seitenvorlagen in WordPress 3.7.1

Überblick

Ich habe einen benutzerdefinierten Posttyp namens Standorte. Wenn der Nutzer / Standorte besucht, möchte ich, dass er einige allgemeine Informationen über alle Standorte erhält. Wenn der Benutzer / location / {a-location} besucht , möchte ich, dass er bestimmte Informationen über “a-location” sieht. Klingt einfach genug.

1. Lösungsversuch

Ich habe eine Locations-Seite im WordPress-Dashboard erstellt, um den Inhalt für die / locations-URL zu speichern. Ich habe dann eine Archiv-locations.php-Datei und eine single-location.php erstellt. archive-locations.php ruft Informationen aus der Standort-Seite ab und listet alle benutzerdefinierten Post-Typ-Standorte auf. Wenn der Benutzer auf einen Link für einen Standort klickt, wird der Benutzer zu / locations / {a-location} umgeleitet und single-location.php wird aufgerufen. Das macht fast den Trick, aber es fühlt sich einfach nicht richtig an und es verursacht einige andere Probleme.

Das Problem

Wenn ein Benutzer / Standorte besucht, würde ich lieber mit einer Seitenvorlage für die Standort-Seite arbeiten (anstelle der Seite archive-locations.php). Ich verwende das Yoast-Plugin, um einen benutzerdefinierten Meta-Titel und eine Beschreibung für jede Seite anzugeben. Da archive-locations.php verwendet wird, wird all dieses Meta ignoriert. Wenn ich mit einer Seitenvorlage arbeiten würde, würden meine Metainformationen korrekt erkannt. Logischerweise fühlt es sich an, als würde ich an der Locations PAGE arbeiten, nicht an einem Archiv. Die Standort-SEITE ist eine eigene Entität mit viel mehr Inhalt als nur ein Archiv mit benutzerdefinierten Beitragstypen. Zu versuchen, es in ein Archivkonzept zu zwingen, scheint wie eine Strecke.

2. Lösungsversuch

Also habe ich eine Seite-locations.php-Vorlage für die Locations-Seite erstellt und ich hatte gehofft, dass sie anstelle der archive-locations.php aufgerufen wird. Leider nicht. Ich habe dann versucht, die Archiv-locations.php zu entfernen und dachte, dass es vielleicht Vorrang hat. Das hat auch nicht geholfen; WordPress rendert einfach index.php. Wenn ich den Typ “Eigene Post” deaktiviere und “/ Standorte” besuche, wird meine Seitenvorlage korrekt aufgerufen. Es sieht so aus, als würde die Benennung eines benutzerdefinierten Post-Typs denselben Namen wie eine Seite haben, was WordPress einige Probleme verursacht. Ich muss jedoch etwas ähnlich sein, damit die URL-Strukturen funktionieren. / locations muss von einer Seitenvorlage abgerufen werden. / locations / {a-location} muss aus einer anderen PHP-Datei abgerufen werden.

Frage

Gibt es eine Möglichkeit, Seitenvorlagen und benutzerdefinierte Post-Typen mit ähnlichen Permalinks zusammen zu arbeiten? Wenn nicht, denke ich, dass meine einzige Option ist, meine header.php zu verbessern und schlauer zu sein, den Titel und die Beschreibung zu bestimmen, wenn ich an / Standorten bin.

Hier ist der Code, der meinen benutzerdefinierten Posttyp registriert, falls ich etwas falsch mache:

$args = array( 'labels' => $labels, 'description' => 'Holds our location specific data', 'public' => true, 'menu_position' => 20, 'supports' => array('title', 'editor', 'thumbnail', 'page-attributes' ), 'hierarchical' => true, 'has_archive' => true, 'rewrite' => array('with_front' => false, 'slug' => 'locations') //remove /news/ from the permalink when displaying a custom post type ); register_post_type( 'locations', $args ); 

(Ich habe auch versucht, has_archive zu false zu ändern, aber es hat nicht geholfen.)

Solutions Collecting From Web of "Mischen von benutzerdefinierten Beitragstypen und Seitenvorlagen in WordPress 3.7.1"

Wenn Sie möchten, dass Ihre einzelnen Post-Seiten hierarchische Untergeordnete von /locations , dann verwenden Sie am einfachsten archive-locations.php .

Ich bin mir nicht sicher, warum Sie hier eine statische Seite “Locations” einfügen, wenn Sie die Vorlagedatei archive-locations.php in irgendeiner Weise Ihren Anforderungen anpassen können – einschließlich der Ausgabe einer benutzerdefinierten Abfrage-Schleife.

Und weil Sie die vollständige Kontrolle über die Vorlage haben, können Sie Ihre eigene Meta-Beschreibung und Ihren eigenen Titel hinzufügen. Beispielsweise:

Benutzerdefinierter Titel

 function wpse124052_locations_title( $title, $sep ) { if ( ! is_post_type_archive( 'locations' ) ) { return $title; } else { return 'Your Custom Title Here'; } } add_filter( 'wp_title', 'wpse124052_locations_title', 10, 2 ); 

Benutzerdefinierte Meta

 function wpse124052_locations_meta() { if ( is_post_type_archive( 'locations' ) ) { echo '