Ich habe ein ziemlich grundlegendes Problem, für das ich überrascht bin, dass WP keine native Lösung hat (es sei denn, ich übersehen hoffentlich etwas).
Ich habe eine WP-Site mit static page
als Startseite in der Leseeinstellung festgelegt. In einem Plugin-Code versuche ich festzustellen, ob WP die Startseite anzeigt, und dem $classes
Array eine Klasse hinzuzufügen, wenn dies der Fall ist. Ich verwende folgenden Code, um dies zu erreichen
add_filter('body_class', function($classes){
if(is_front_page() || is_home()){
$classes[] = 'home-page';
}
return $classes;
});
Ich verwende beide is_front_page()
und is_home()
für den Fall, dass sich die Einstellung der Startseite in Zukunft von der statischen Seite zum Blog-Layout ändert.
Das Problem, auf das ich stoße, ist, dass dieser Code sogar auf der Seite eine home-page
Klasse hinzufügt . body
wp-signup.php
Das Überprüfen des Codes zeigt, dass is_front_page()
Aufrufe WP_Query::is_front_page()
, die im Wesentlichen Ergebnisse von zurückgeben WP_Query::is_page(get_option('page_on_front'))
. Die Wurzel des Problems liegt also darin, dass es wp-signup.php
sich um die Seite (ID) handelt, die von zurückgegeben wird get_option('page_on_front')
( die ID
die statische Seite zurückgibt, die in Einstellungen> Lesen als Startseite festgelegt wurde ).
WP_Query::is_page()
wird WP_Query::get_queried_object()
intern verwendet, um zu entscheiden, ob die aktuelle Seite die in Methodenargumenten vorhandene Seite ist. In diesem wp-signup.php
Fall lautet der Code, der das aktuell abgefragte Objekt festlegt, wie folgt
/*...other code... */
elseif ( $this->is_singular && ! empty( $this->post ) ) {
$this->queried_object = $this->post;
$this->queried_object_id = (int) $this->post->ID;
}
/*...other code... */
Dies zeigt, dass WordPress aus irgendeinem Grund die Startseite abfragt, um sie anzuzeigen, wp-signup.php
und folgende Fragen aufwirft.
- Warum werden
is_front_page()
falsche Ergebnisse zurückgegeben? - AFAIK
wp-signup.php
kann niemals mit der Wordpress-Administratoreinstellung als Startseite festgelegt werden. Warum wird WordPress-Code dann nicht einfach durch Überprüfen vonPHP_SELF
oder gerettetREQUEST_URI
? - Warum hat WP_Query
$this->post
zu diesem Zeitpunkt eine aktuelle Homepage ?
Ich habe ein Plugin-Problem ausgeschlossen, indem ich das Plugins-Verzeichnis (und das Mu-Plugins-Verzeichnis) entfernt habe. Es gilt weiterhin wp-signup.php
als Startseite, wo es für keine andere Seite gilt.
Jede Hilfe zu diesem Thema wird sehr geschätzt.
Update
Ich verwende WP Version 4.2.4 und es ist ein Multisite-Setup.
Vielen Dank.
if
Bedingung:( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'wp-signup.php' ) && ( is_front_page() || is_home() )
Antworten:
Nur Spekulation, aber ich frage mich, ob Sie auf ein anonymes Funktionsproblem stoßen. Anonyme Funktionen sind in WP zulässig und funktionieren normalerweise einwandfrei (vorausgesetzt, aktualisiertes PHP). Wenn Sie sich jedoch umsehen, werden Sie Berichte über vermutete Fehler oder zumindest über unerwartetes Verhalten finden.
Im Übrigen bin ich mir nicht sicher, ob ich jemals eine anonyme Funktion gesehen habe, die als Beispiel im WordPress-Codex verwendet wurde, und ich kann mich nicht erinnern, jemals zuvor eine solche in Theme- und Plug-In-Code verwendet zu haben. Natürlich habe ich nicht nach anon-Funktionen Ausschau gehalten, aber ich denke trotzdem, dass die obige Funktion fast immer in einer Version des bekannteren zweiteiligen Formats geschrieben wird - dh:
Als Experiment würde ich also das oben genannte "konventionellere" Format ausprobieren und es auch mit einer festgelegten Priorität von mehr als 10 ausprobieren. Wenn mehrere anonyme Funktionen an denselben Filter angehängt werden, würde ich ihnen unterschiedliche Prioritäten geben. oder verwenden Sie ein Array (Beispiel hier: http://snippets.khromov.se/adding-multiple-actions-and-filters-using-anonymous-functions-in-wordpress/ ) oder schreiben Sie jedes Array wie folgt: auch Partner.
In Wahrheit finde ich den etwas längeren zweiteiligen Weg sowieso leichter zu lesen, zu verfolgen und anzupassen.
quelle
WordPress verwendet verschiedene Vorlagen für Seiten auf Ihrer Website. Wenn Ihr Thema eine page.php-Vorlage enthält, wird diese zum Anzeigen Ihrer Seiten verwendet. Wenn Sie eine single.php haben, wird diese verwendet, um Ihre einzelnen Beiträge anzuzeigen. index.php oder home.php würde Ihre Homepage oder page.php anzeigen, wenn Sie eine bestimmte Seite über die Leseoptionen als Homepage ausgewählt haben.
Also, Ihre bedingte Aussage:
Wäre nur in der Datei header.php oder footer.php- oder in page.php wirklich nützlich, wenn Sie eine bestimmte Seite in den Leseoptionen ausgewählt haben.
quelle