Ich arbeite an einem untergeordneten Thema. Ich bevorzuge es nachdrücklich, die Hauptvorlagendateien nicht zu überschreiben, um die Einfachheit des untergeordneten Themas beizubehalten und den Code- und Wartungsaufwand im Laufe der Zeit zu minimieren.
In der Schleife verwendet die index.php-Vorlage im übergeordneten Thema Folgendes:
get_template_part( 'content' );
was content.php einbringt , ich möchte, dass es sich ähnlicher get_template_part( 'content', get_post_format() );
oder ähnlicher verhält , um verschiedene Vorlagen wie content-aside.php usw. einzubringen , ohne eine index.php im untergeordneten Thema zu erstellen, um die zu überschreiben Eltern für eine einzelne Zeile ändern.
get_template_part()
besteht aus:
function get_template_part( $slug, $name = null ) {
do_action( "get_template_part_{$slug}", $slug, $name );
$templates = array();
$name = (string) $name;
if ( '' !== $name )
$templates[] = "{$slug}-{$name}.php";
$templates[] = "{$slug}.php";
locate_template($templates, true, false);
}
Es ist also eine Aktion verfügbar, in meinem Fall namens get_template_part_content
Ich kann mich mit so etwas an die Action binden:
add_action( 'get_template_part_content', 'child_post_styles', 10, 2 );
function child_post_styles ( $slug, $name ) {
if( false == $name ){
$name = get_post_format();
$templates = array();
if ( '' !== $name )
$templates[] = "{$slug}-{$name}.php";
$templates[] = "{$slug}.php";
locate_template($templates, true, false);
}
}
Dies führt offensichtlich zu Post-Duplizierungen, eine von meiner Hook-Funktion, die die gewünschte Vorlage anzeigen kann, und die andere vom normalen locate_template
Aufruf anget_template_part()
Ich habe Probleme, einen Weg zu finden, um dies ohne Duplizieren oder ohne Rendern der Endseite zu erreichen, direkt nachdem ich meinen Template-Teil geliefert habe, indem ich etwas Dummes wie ein break
oder tueexit
quelle
Antworten:
Dafür gibt es keinen Haken. Kopieren Sie die Datei index.php in das untergeordnete Thema und nehmen Sie die Änderung in einer Zeile vor. Sagen Sie dem Autor des übergeordneten Themas außerdem, dass er aus Gründen der Flexibilität die gleiche Änderung an seinem Thema vornehmen soll.
quelle
ob_start
drin verwenden und denob_end
an manchen Stellen später ausgeführten Haken damit aber nie wiedergeben, was normalerweise gut genug ist. Oder Sie könnten exit () verwenden, um das Beenden von PHP zu erzwingen (nachdem Sie alles, was noch fehlt, manuell hinzugefügt haben: Fußzeile usw.)Ich denke, es ist nicht genau möglich, wie Sie es erreichen wollen. Es ist wirklich ärgerlich, dort keinen Filter zum Ändern der Namen von Vorlagendateien zu erhalten :(
Ich habe eine Problemumgehung. Verwenden Sie
content.php
für den Vergleich.Ich habe nicht das zweite Argument der
get_template_part
Funktion verwendet, sondern das Suffix für das erste Argument übergeben, um infinitive Aufrufe dercontent.php
Datei zu vermeiden, wenn keine'content-'. $format
Datei vorhanden ist.quelle
Nun, es gibt LÖSUNG :
aber überlegen Sie genau, in welchen Haken Sie diese Aktion einfügen sollten ... um die Position manuell zu ermitteln, verwenden Sie z
locate_template('content-header.php', false);
quelle
Wenn Sie eine Datei mit dem Namen content-aside.php einlesen möchten, rufen Sie die Funktion folgendermaßen auf:
Der zweite Parameter ist der Name des Filers nach dem Bindestrich. Wenn sich Ihre Datei in einem Unterverzeichnis befindet (templates / content-aside.php):
Ist es das, was Sie tun wollen?
quelle