Gibt es eine Möglichkeit, get_template_part () mit Ordnern zu verwenden?

26

Ich frage mich, ob es eine Möglichkeit gibt, get_template_part () mit Ordnern zu verwenden. In meinem Hauptordner befinden sich jetzt viele Dateien, da ich jedes wiederverwendbare Element in einer separaten Datei abgelegt habe. Ich würde sie dann gerne in Ordnern ablegen.

Es gibt keine Informationen dazu im Codex: http://codex.wordpress.org/Function_Reference/get_template_part

Paul
quelle

Antworten:

40

In der Tat kann man, habe ich einen Ordner in meinem Thema Verzeichnis mit dem Namen /partials/in in diesen Ordner I Dateien wie latest-articles.php, latest-news.phpund latest-statements.phpich diese Dateien laden mit get_template_part()wie:

get_template_part('partials/latest', 'news');

get_template_part('partials/latest', 'articles');

get_template_part('partials/latest', 'statements');

Vergessen Sie einfach nicht, das .phpaus dem Dateinamen wegzulassen .

Ahmad M
quelle
Vielen Dank! Es ist so einfach, dass es eine Schande ist, dass ich das nicht entdeckt habe. Ich war überzeugt, dass dies nicht möglich ist, weil Codex das nicht erwähnt. Diese Frage brachte mehr interessante Antworten, aber diese ist die einfachste, sodass sie für Durchschnittspersonen wahrscheinlich am nützlichsten ist :) (also lassen Sie sie mit einem grünen Häkchen markieren).
Paul
1
Glücklicherweise ist es möglich, den Codex zu bearbeiten, damit die nächste Person nicht das gleiche Problem hat. :-)
Dalton
@Sebastien Sie können tatsächlich ex: <?php get_template_part('partials/file'); ?>
HauntedSmores
5

Ich fürchte nein. Wenn Sie im Codex nichts wissen möchten, versuchen Sie, dem Link zur Quelle zu folgen, sich den Code selbst anzusehen und ihn zu verwalten.

Ich habe nachgesehen und die Funktion get_template_part ist wie folgt definiert:

function get_template_part( $slug, $name = null ) {
    do_action( "get_template_part_{$slug}", $slug, $name );

    $templates = array();
    if ( isset($name) )
        $templates[] = "{$slug}-{$name}.php";

    $templates[] = "{$slug}.php";

    locate_template($templates, true, false);
}

Daraus können Sie lesen, dass die Funktion get_template_part nur einen vorgesehenen Php-Dateinamen erstellt und die Funktion locate_template aufruft. Dies ist nicht sinnvoll, daher habe ich mir auch die Funktion locate_template angesehen:

function locate_template($template_names, $load = false, $require_once = true ) {
    $located = '';
    foreach ( (array) $template_names as $template_name ) {
        if ( !$template_name )
            continue;
        if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {
            $located = STYLESHEETPATH . '/' . $template_name;
            break;
        } else if ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
            $located = TEMPLATEPATH . '/' . $template_name;
            break;
        }
    }

    if ( $load && '' != $located )
        load_template( $located, $require_once );

    return $located;
}

Get locate template sucht nach PHP-Dateien, die von get_template_part aufgerufen werden. Sie können locate_template jedoch direkt aus Ihrem Code aufrufen . Und das ist nützlich.

Probieren Sie diesen Code anstelle der Funktion get_template_part ('loop-sigle.php') aus (Ihre Datei befindet sich in mydir in Ihrem Theme):

locate_template( 'mydir/loop-single.php', true, true );
david.binda
quelle
Interessante Verknüpfung, ich frage mich, ob es negative Auswirkungen auf die Ladereihenfolge oder den Dateiinhalt hat.
Lowtechsun
2

Die Funktionsanmerkungen get_template_part()sagen:

Anmerkungen
- Verwendet: locate_template ()
- Verwendet: do_action () Ruft die Aktion 'get_template_part _ {$ slug}' auf.

Wovon können Sie Gebrauch machen locate_template() , was sagt:

Sucht im STYLESHEETPATH ​​vor TEMPLATEPATH, sodass Themen, die von einem übergeordneten Thema erben, nur eine Datei überladen können.

Wenn Sie TEMPLATEPATHmit dem Unterverzeichnis definieren, das Sie verwenden möchten, get_template_part()wird nach den Dateien in Ihrem Unterverzeichnis gesucht.

Mike Madern
quelle