Gibt es eine Möglichkeit, eine Seitenvorlage aus einer Funktion / einem Filter / einem Hook zu definieren, ohne dass eine .php-Datei mit dem Kommentar oben auf der Seite vorhanden ist, um den Vorlagennamen zu deklarieren?
Zum Beispiel, anstatt dies zu tun:
some-custom-page-template.php
/**
* Template Name: Some Custom Page Template
*/
another-custom-page-template.php
/**
* Template Name: Another Custom Page Template
*/
Ich frage mich, ob ich so etwas tun kann:
functions.php
wp_some_function_to_define_templates( 'Some Custom Page Template' );
wp_some_function_to_define_templates( 'Another Custom Page Template' );
BEARBEITEN : Ich schreibe ein komplexes und experimentelles WP-Thema. Es ist so objektorientiert, wie es WP zulässt. Ich habe Controller-Klassen, um zu entscheiden, was auf jeder Seite angezeigt werden soll, DAO-Klassen, um Daten aus DB, Twig abzurufen Vorlagen zum Generieren der Ansichten und so weiter ...
Ich habe den Code so weit verbreitet, dass meine Seitenvorlagen nur noch eine Codezeile sind, in der ich einen Controller aufrufe und ihn die Arbeit machen lasse, um schließlich eine Zweigvorlage zu rendern. Also habe ich beschlossen, diesen Aufruf an den Controller in den template_include
Filter zu verschieben, damit ich nicht einmal Code in die Seitenvorlagen einfügen muss ...
Ich werde möglicherweise Seitenvorlagen entfernen, aber ich brauche sie immer noch, um Seiten irgendwie zu gruppieren , um einige erweiterte benutzerdefinierte Feldgruppen für sie festzulegen usw.
Am Ende hatte ich ungefähr 15 PHP-Dateien, die oben nur einen Kommentar mit einem Vorlagennamen enthalten. Genau das möchte ich vermeiden, indem ich diese Vorlagen aus einer Funktion definiere ...
Versuche ich das Rad neu zu erfinden ? Vielleicht in gewissem Sinne, aber ich denke, es wird ein wirklich cooles Thema, sehr wartbar und modifizierbar ...
Antworten:
WordPress liest die Vorlagen aus den Datei-Headern und legt sie dann im Cache ab. Verwenden Sie
wp_cache_set()
nad, einen Schlüssel, der vom MD5-Stylesheet-Ordner abgeleitet ist.Wenn Sie also nur diesen Cache überschreiben, können Sie die gewünschten Vorlagen anzeigen. Um diesen Cache zu überschreiben, müssen wir
wp_cache_set()
erneut mit demselben Schlüssel aufrufen .Lassen Sie uns zunächst eine Funktion schreiben, die die Vorlagen abruft, die wir anzeigen möchten. Es gibt viele Möglichkeiten, Vorlagen festzulegen: Option, Konfigurationsdatei, Filter oder eine Kombination davon:
Danach müssen wir die Vorlagen innerhalb der Seitenbearbeitung abrufen, kurz nachdem WordPress den Cache gespeichert hat. Außerdem müssen wir sie erneut erhalten, wenn das Bearbeitungsformular veröffentlicht wird, um das Speichern zu ermöglichen.
Wir können den
'edit_form_after_editor'
Haken für den ersten Bereich'load-post.php'
und'load-post.new'
für den zweiten verwenden:Als letztes müssen wir die
set_custom_page_templates()
Funktion schreiben, die den Cache bearbeitet, um unsere Vorlagen einzuschließen, und dabei sicherstellen, dass alle durch Dateikopfzeilen definierten Vorlagen zusammengeführt werden:Wenn dieser Code ausgeführt wird, können Sie benutzerdefinierte Vorlagen nur mit der in der
get_custom_page_templates()
Funktion verwendeten Methode einrichten. Hier verwende ich den Filter:Und du bist fertig.
quelle
Wenn ich dich verstehe, kannst du das mit dem
template_include
Haken machen. Zum Beispiel:quelle
Ich schlage Ihnen eine einfachere Problemumgehung vor:
$config_template = false;
(*).$config_template = 'some-custom-page'; require( "../index.php" );
Mit dieser Methode erzwingen Sie nicht den normalen Workflow von WP (dies ist nie eine gute Idee), aber Sie halten Ihr Projekt ausreichend sauber.
(*) Wahrscheinlich verwenden Sie bereits einige Objekteigenschaften, um Ihre Konfigurationen zu verwalten. Dort legen Sie die Variable $ config_template ab.
quelle