Mein Lieblingsteil der Wordpress- Vorlagenhierarchie ist die Möglichkeit, schnell Vorlagendateien für Seiten per Slug zu erstellen, ohne die Seite in Wordpress bearbeiten zu müssen, um eine Vorlage auszuwählen.
Das können wir derzeit tun:
page- {slug} .php
Das möchte ich aber können:
single- {post_type} - {slug} .php
So review
könnte ich zum Beispiel in einem Beitragstyp namens "My Great Review" unter eine Vorlage für einen Beitrag mit dem Namen "My Great Review" erstellensingle-review-my-great-review.php
Hat das schon mal jemand eingerichtet? single-{post_type}-{slug}.php
single-{post_type}-{slug}.php
, daher ist ein Upgrade auf WP 3.4 eine weitere Option.Antworten:
A) Die Basis im Kern
Wie Sie in der Erklärung zur Codex- Vorlagenhierarchie sehen können,
single-{$post_type}.php
wird dies bereits unterstützt.B) Erweiterung der Kernhierarchie
Jetzt sind gerne ein paar Filter und Haken drin
/wp-includes/template-loader.php
.do_action('template_redirect');
apply_filters( 'template_include', $template )
get_query_template( $type, ... )
Namen:"$type}_template"
B.1) Wie es funktioniert
is_*()
.is_single() && $template = get_single_template()
get_query_template( $type, $templates )
, wo$type
istsingle
"{$type}_template"
FilterC) Die Lösung
Da wir nur die Hierarchie mit einer Vorlage erweitern möchten, wird vor dem Laden der aktuellen
"single-{$object->post_type}.php"
Vorlage, werden wir die Hierarchie abfangen und eine neue Vorlage zu Beginn des Vorlagen - Array hinzuzufügen.HINWEIS: (Wenn Sie etwas anderes als den Standardobjekt-Slug verwenden möchten), müssen Sie die Einstellungen
$slug
entsprechend Ihrer Permalink-Struktur vornehmen. Verwenden Sie einfach alles, was Sie von der globalen benötigen(object) $post
.Trac Karten
Da der oben beschriebene Ansatz derzeit nicht unterstützt wird (Sie können nur den absolut lokalisierten Pfad auf diese Weise filtern), finden Sie hier eine Liste der Trac-Tickets:
get_query_template()
quelle
)
Im Filter fehlt ein weiteres . Fest. Vielleicht möchten Sie den Gedankenstrich mit einer Unterstreichung vor dem Slug in der Vorlage austauschen. Nur um das Suffix besser hervorzuheben, wenn Sie sich die Vorlagen ansehen.$templates
ist ein Array. Siehe die Kernfunktionen in diesem Pastebin (kein Ablaufdatum). Stellen Sie sicher, dass Sie dies mit einer Installation ohne Plugins und dem Standarddesign testen . Aktivieren Sie dann nacheinander und prüfen Sie, ob der Fehler weiterhin auftritt.slug
ist nur für Begriffe und Taxonomien verfügbar. Sie sollten das ersetzen,$post->post_name
was zu Ihrer Permalink-Struktur passt. Derzeit gibt es keine Möglichkeit, dies automatisch für alle Fälle zu tun, indem der Pfad abhängig von Ihrer Permastruktur und den Umschreiberegeln abgerufen und ersetzt wird. Erwarten Sie ein weiteres Update.Nach dem Bild der Vorlagenhierarchie sehe ich keine solche Option.
Also hier ist, wie ich vorgehen würde:
Lösung 1 (meiner Meinung nach am besten)
Erstellen Sie eine Vorlagendatei und ordnen Sie sie der Überprüfung zu
Wenn Sie die Vorlagen-PHP-Datei in Ihr Themenverzeichnis aufnehmen, wird sie als Vorlagenoption auf der Bearbeitungsseite Ihres Beitrags angezeigt.
Lösung 2
Dies könnte wahrscheinlich mit
template_redirect
Haken erreicht werden .In der functions.php Datei:
BEARBEITEN
file_exists
Check hinzugefügtquelle
exit;
da?exit()
ist notwendig, um das Laden der Standardvorlage zu verhindern.Die Top-Antwort (seit 4 Jahren) funktioniert nicht mehr, aber der WordPress-Codex hat hier die Lösung :
quelle
Verwenden Sie Seitenvorlagen
Ein weiterer Ansatz für die Skalierbarkeit besteht darin, die Dropdown-Funktion für Seitenvorlagen für den
page
Beitragstyp für Ihren benutzerdefinierten Beitragstyp zu duplizieren .Wiederverwendbarer Code
Die Vervielfältigung von Code ist keine gute Praxis. Im Laufe der Zeit kann es zu einem starken Aufblähen der Codebasis kommen, wenn es dann für einen Entwickler sehr schwierig ist, damit umzugehen. Anstatt eine Vorlage für jeden einzelnen Slug zu erstellen, benötigen Sie höchstwahrscheinlich eine Eins-zu-Viele-Vorlage, die anstelle einer Eins-zu-Eins-Post-zu-Vorlage wiederverwendet werden kann.
Der Code
Dies ist eine etwas verspätete Antwort, aber ich dachte, es wäre wertvoll, da niemand im Web diesen Ansatz dokumentiert hat, soweit ich das beurteilen kann. Hoffe das hilft jemandem aus.
quelle
In meinem Fall sind die benutzerdefinierten Post-Typen "Album" und "Track" durch eine Album-Taxonomie verknüpft. Ich wollte in der Lage sein, abhängig von ihrer Albumtaxonomie verschiedene Einzelvorlagen für die Album- und Track-Posts zu verwenden.
Basierend auf Kaisers Antwort habe ich diesen Code geschrieben. Es läuft gut.
Hinweis. Ich habe die add_action () nicht benötigt.
Ich kann jetzt Vorlagen mit den Namen single-gregory-cpt-track-tax-serendipity.php und single-gregory-cpt-album-tax-serendipity.php erstellen und WP verwendet sie automatisch. 'tax-serendipity' ist der Slug für den ersten Begriff der Album-Taxonomie.
Als Referenz wird der Filter-Hook 'single_template' deklariert in:
/wp-includes/theme.php:
get_query_template()
Vielen Dank Kaiser für den Beispielcode.
Prost, Gregory
quelle
Beim Update für Brians-Code stellte ich fest, dass bei Nichtverwendung des Dropdown-Felds die "Standard" -Vorlagenoption in wp_page_template gespeichert wurde, wodurch versucht wurde, eine Vorlage mit dem Namen "Standard" zu finden. Diese Änderung überprüft nur die Option "Standard" beim Speichern und löscht stattdessen das Post-Meta (nützlich, wenn Sie die Vorlagenoption wieder auf den Standard zurückgesetzt haben).
quelle