Ersetzen Sie single_template-Filter durch was für Standard-Posts?

Ich habe ein Tutorial über Justin Tadlocks Blog gelesen, aber es benutzt den single_template Filter, der in 3.4 entfernt wurde. Der Codex sagt, dass ich {$ type} _template verwenden soll, aber wenn ich “post_template” mit dem Code auf dieser Seite verwende, funktioniert es nicht.

Solutions Collecting From Web of "Ersetzen Sie single_template-Filter durch was für Standard-Posts?"

Die gewünschten Antworten sind im Code enthalten. Das heißt, Sie müssen erforschen gehen.

Ihre Suche sollte mit wp-includes/template-loader.php . Dies ist die allerletzte Datei, die WordPress enthält, bevor das Thema geladen wird. Es durchläuft eine Reihe von Bedingungen, um zu überprüfen, welche Art von Seite wir sind und welche Vorlage zu holen.

Die relevante (beleidigende?) Linie:

 < ?php elseif ( is_single() && $template = get_single_template() ) : 

Jetzt, da wir wissen, get_single_template holt Vorlagen für einzelne Beiträge, können wir diese function in wp-includes/template.php .

 < ?php /** * Retrieve path of single template in current or parent template. * * @since 1.5.0 * * @return string */ function get_single_template() { $object = get_queried_object(); $templates = array(); $templates[] = "single-{$object->post_type}.php"; $templates[] = "single.php"; return get_query_template( 'single', $templates ); } 

Noch keine Filter, aber Sie fangen an zu sehen, wie WP Vorlagen findet. Jetzt müssen wir sehen, was get_query_template tut ( get_query_template ist auch in wp-includes/template.php ).

 < ?php /** * Retrieve path to a template * * Used to quickly retrieve the path of a template without including the file * extension. It will also check the parent theme, if the file exists, with * the use of {@link locate_template()}. Allows for more generic template location * without the use of the other get_*_template() functions. * * @since 1.5.0 * * @param string $type Filename without extension. * @param array $templates An optional list of template candidates * @return string Full path to file. */ function get_query_template( $type, $templates = array() ) { $type = preg_replace( '|[^a-z0-9-]+|', '', $type ); if ( empty( $templates ) ) $templates = array("{$type}.php"); return apply_filters( "{$type}_template", locate_template( $templates ) ); } 

Das erste Argument ist der Typ der Vorlage, die gesucht werden soll ( single für diese Frage) und die zweite ist eine Reihe von zu durchsuchenden Vorlagen. Dies ist der Punkt, wo wir aufhören. locate_template durchsucht nur die locate_template und übergeordneten Themenverzeichnisse für jede der Dateien im $templates Array - es gibt den Dateipfad zurück, wenn einer gefunden wird, oder einen leeren Pfad, falls dies nicht der locate_template ist.

Beachten Sie, dass $type in dieser function "single" ist.

Ich habe das ganze oben geschrieben, also könnte ich dir sagen, dass der Filter immer single_template . Die eigentliche Zeichenfolge single_template wird nicht in der Quelle gefunden, aber der Filter existiert noch (und es funktioniert ).