it-swarm.com.de

Ist es möglich, das Ergebnis von get_template_part () zu überschreiben?

Ich arbeite an einem untergeordneten Thema. Ich bevorzuge es dringend, 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 Design: get_template_part( 'content' );

was content.php einbringt, ich schaue, dass es sich eher wie get_template_part( 'content', get_post_format() ); oder ähnlich verhält, um verschiedene Templates einzubringen, wie content-aside.php , etc, ohne ein index.php im untergeordneten Thema zu erstellen, um das übergeordnete Thema für eine einzelne Zeilenänderung zu überschreiben.

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 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 von dem normalen Aufruf von locate_template in get_template_part().

Ich habe Probleme, einen Weg zu finden, dies ohne Duplizieren oder ohne das Rendern der Seite zu beenden, nachdem ich meinen Template-Teil geliefert habe, indem ich etwas Dummes wie eine break oder exit tue.

12
TomHarrigan

Es gibt keinen Haken dafür. 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.

3
Otto

Ich denke, es ist nicht genau möglich, wie Sie es erreichen wollen. Es ist wirklich ärgerlich, wenn dort kein Filter zum Ändern der Namen von Vorlagendateien angezeigt wird :(

Ich habe eine Problemumgehung. Verwenden Sie für den Vergleich content.php.

// content.php file 
$format = get_post_format();
if( '' != $format ){
    get_template_part( 'content-'. $format );
}
else{
    get_template_part( 'content-default' );
}

Ich habe nicht das zweite Argument der Funktion get_template_part verwendet, sondern das Suffix des ersten Arguments übergeben, um unbegrenzte Aufrufe der Datei content.php zu vermeiden, wenn keine Datei 'content-'. $format vorhanden ist.

6
Shazzad

Nun, es gibtLÖSUNG:

add_action('init', function(){ remove_all_actions('get_template_part_content'); });
add_action('get_template_part_content', 'yourFunc', 99, 2 );
function yourFunc ( $slug, $name ) {

    .........any codes here.............
    if ($name == 'header'){
       //but this will be executed before loading template... At this moment, Wordpress doesnt support any hooks for before/after LOAD_TEMPLATE...
    }
}

aber überlege dir genau, in welchen Hook du diese Aktion einfügen solltest ... um die Position manuell zu ermitteln, benutze, d. h. locate_template('content-header.php', false);

3
T.Todua

Wenn Sie eine Datei mit dem Namen content-aside.php einlesen möchten, rufen Sie die Funktion folgendermaßen auf:

get_template_part( 'content', 'aside' );

Der zweite Parameter ist der Name des Filers nach dem Bindestrich. Wenn sich Ihre Datei in einem Unterverzeichnis befindet (templates/content-aside.php):

get_template_part( 'templates/content', 'aside' );

Ist es das, was Sie tun wollen?

0
Justin R