it-swarm.com.de

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

Ich verstehe, dass es bei Verwendung von get_template_part('content', get_post_format()); hilfreich ist, einen post format für eine bestimmte Seite gemäß dem Post-Format auszuwählen.

Und wenn es kein Post-Format gibt, das heißt, es ist Standard, wird auf content.php zurückgegriffen.

Aber was ist, wenn ich content-single.php mit 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.php Seite? Gibt es andere Funktionen, die ich nicht kenne?

6
Emad Aldeen

Nein, content.php und content-single.php sind 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 lädt content-single.php, wenn get_post_format()false ist. Im folgenden Beispiel versucht get_template_part( $slug, $name ) möglicherweise immer noch, content.php zu laden, wenn Sie ihn mit get_template_part('content', get_post_format()); aufrufen:

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

  2. Sie haben jedoch keine content-video.php Template-Teiledatei.

Selbst wenn get_post_format() nicht false ist, stellt content.php Ihnen dennoch den Standardvorlagenteil zur Verfügung, wenn der entsprechende Beitragsformat-bezogene Vorlagenteil nicht erstellt wurde.

Fazit:Unabhängig vom Haupt-$slug ist es immer eine gute Idee, die Standardvorlagendatei als endgültigen Fallback-Vorlagenteil beizubehalten (in Ihrem Fall ist content.php dieser Standardfallback-Vorlagenteil) Datei). Also JA, du brauchst es vielleicht 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 Core immer $templates[] = "{$slug}.php"; als endgültige Fallback-Vorlagendatei lädt:

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);
}

Dann durchläuft es in locate_template function das $templates-Array, 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 aus dem obigen CODE ersehen können, findet WordPress keine Vorlagendatei, auf die Sie zurückgreifen können, wenn Sie content.php löschen und wenn der Benutzer des Themas ein Post-Format hat, für das Sie keine Vorlagenteiledatei haben Laden Sie in diesem Fall nichts. Als letzter Versuch versucht WordPress, eine Vorlagenteiledatei aus dem wp-includes/theme-compat/ core-Verzeichnis zu laden, aber es gibt keine content.php template-Teiledatei im WP core.

Hinweis:Wenn Sie jedoch ein untergeordnetes Thema erstellen und das übergeordnete Thema bereits die Datei content.php enthält, benötigen Sie keine Datei content.php im untergeordneten Thema (wenn Sie keine Angaben machen). Sie dürfen dort keine Änderungen vornehmen, da WordPress in diesem Fall die content.php-Datei des übergeordneten Themas als Ersatzvorlagenteildatei verwendet.

2
Fayaz

Mit nur einer Vorlage (content.php) kommt man zurecht. Das ist normalerweise weniger als ideal.

Aus dem Blog von the teamtreehouse sollte Ihre Frage klären.

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

0