Sind content.php und content-single.php gleich?

8

Ich verstehe, dass bei der Verwendung get_template_part('content', get_post_format());eine Auswahl post formatfür eine bestimmte Seite gemäß dem Post-Format hilfreich ist .

Und wenn es kein Post-Format gibt, dh es ist Standard, wird es auf zurückgreifen content.php

Aber was ist, wenn ich content-single.phpmit einer Logik wie dieser verwendet habe:

if (get_post_format() == false) {
    get_template_part('content', 'single');
    } else {
        get_template_part('content', get_post_format());
}

Benötige ich noch eine content.phpSeite? Gibt es andere Funktionen, die ich nicht kenne?

Emad Aldeen
quelle

Antworten:

3

Nein, content.phpund content-single.phpsind nicht dasselbe.

In Ihrem Beispiel CODE:

if (get_post_format() == false) {
    get_template_part('content', 'single');
} else {
    get_template_part('content', get_post_format());
}

WordPress wird geladen, content-single.phpwenn es get_post_format()ist false. Allerdings get_template_part( $slug, $name )kann versuchen noch zu laden , content.phpwenn Sie es mit Aufruf get_template_part('content', get_post_format());im folgende Beispiel:

  1. get_post_format()gibt zurück (zum Beispiel) video.

  2. Sie haben jedoch keine content-video.phpVorlagenteildatei.

Selbst wenn dies get_post_format()nicht der Fall ist false, erhalten content.phpSie im Grunde immer noch den Standardvorlagenteil, wenn der entsprechende Vorlagenteil für das Postformat nicht erstellt wurde.

Fazit: Unabhängig von der Hauptsache$slugist es immer eine gute Idee, die Standardvorlagenteil-Datei als endgültigen Fallback-Vorlagenteil beizubehalten (in Ihrem Fallcontent.phpist dies die Standard-Fallback-Vorlagenteildatei). Also JA, vielleicht brauchen Sie es noch . Also nicht löschen, sondern in Ruhe lassen.

Das Folgende ist der Teil des CODE aus der Kernfunktion get_template_part. Sie werden sehen, dass der Kern immer $templates[] = "{$slug}.php";als endgültige Fallback-Vorlagendatei geladen wird:

function get_template_part( $slug, $name = null ) {
    // ... more CODE from WP core
    $templates = array();
    $name = (string) $name;
    if ( '' !== $name )
        $templates[] = "{$slug}-{$name}.php";

    $templates[] = "{$slug}.php"; 
    locate_template($templates, true, false);
}

In der locate_templateFunktion durchläuft es dann das $templatesArray, bis es die entsprechende Datei mit dem folgenden CODE findet:

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;
        } elseif ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
            $located = TEMPLATEPATH . '/' . $template_name;
            break;
        } elseif ( file_exists( ABSPATH . WPINC . '/theme-compat/' . $template_name ) ) {
            $located = ABSPATH . WPINC . '/theme-compat/' . $template_name;
            break;
        }
    }
    if ( $load && '' != $located )
        load_template( $located, $require_once );

    return $located;
}

Wie Sie dem obigen CODE entnehmen können, content.phpfindet WordPress beim Löschen und wenn der Theme-Benutzer ein Post-Format hat, für das Sie keine Template-Teiledatei haben, keine Template-Datei, auf die zurückgegriffen werden kann, und lädt sie einfach nichts in diesem Fall. Als letzten Versuch versucht WordPress, eine Vorlagenteildatei aus dem Kernverzeichnis zu laden wp-includes/theme-compat/, aber es gibt keine content.phpVorlagenteildatei im WP-Kern.

Hinweis: Wenn Sie jedoch ein untergeordnetes Themacontent.phperstellenund das übergeordnete Thema dieDateibereits enthält, benötigen Sie keinecontent.phpDatei im untergeordneten Thema (wenn Sie dort keine Änderungen vornehmen), da dies in diesem Fall WordPress tut Verwenden Sie diecontent.phpDateides übergeordneten Themasals Ersatzdatei für die Fallback-Vorlage.

Fayaz
quelle
0

Sie könnten mit nur einer Vorlage (content.php) auskommen. Das ist normalerweise weniger als ideal.

Aus dem Blog des Teamtreehouse sollte Ihre Frage klären.

Für mich ist dieser Ansatz ein Fallback-Weg.

Vishal Kumar Sahu
quelle