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() )