J'ai un problème assez basique pour lequel je suis surpris que WP n'ait pas de solution native (sauf si j'oublie quelque chose, espérons-le).
J'ai un site WP avec static page
défini comme première page dans le paramètre de lecture. Dans un code de plugin, j'essaie de déterminer si WP affiche la page d'accueil et d'ajouter une classe au $classes
tableau si c'est vrai. J'utilise le code suivant pour l'accomplir
add_filter('body_class', function($classes){
if(is_front_page() || is_home()){
$classes[] = 'home-page';
}
return $classes;
});
J'utilise les deux is_front_page()
et is_home()
au cas où le paramètre de page d'accueil passerait de la page statique à la mise en page du blog à l'avenir.
Le problème que je rencontre est que ce code ajoute de la home-page
classe à body
même sur la wp-signup.php
page.
L'inspection du code révèle que les is_front_page()
appels WP_Query::is_front_page()
, ce qui renvoie essentiellement les résultats de WP_Query::is_page(get_option('page_on_front'))
. Ainsi, la racine du problème est celle qui se wp-signup.php
qualifie comme la page (id) retournée par get_option('page_on_front')
( qui retourne ID
la page statique définie comme première page dans les paramètres> lecture ).
WP_Query::is_page()
utilise en WP_Query::get_queried_object()
interne pour décider si la page actuelle est la page présente dans les arguments de méthode. Dans le wp-signup.php
cas, le code qui définit l'objet interrogé en cours est le suivant
/*...other code... */
elseif ( $this->is_singular && ! empty( $this->post ) ) {
$this->queried_object = $this->post;
$this->queried_object_id = (int) $this->post->ID;
}
/*...other code... */
Cela montre que wordpress, pour une raison quelconque, interroge la première page afin d'afficher wp-signup.php
et soulève les questions suivantes.
- Pourquoi
is_front_page()
renvoie des résultats erronés? - AFAIK
wp-signup.php
ne peut jamais être défini comme page d'accueil à l'aide des paramètres d'administrateur Wordpress, alors pourquoi le code wordpress ne sort pas simplement en vérifiantPHP_SELF
ouREQUEST_URI
? - Pourquoi WP_Query a-t-il la page d'accueil actuelle
$this->post
à ce stade?
J'ai exclu le problème des plugins en supprimant le répertoire des plugins (et mu-plugins). Il est toujours considéré wp-signup.php
comme la première page alors qu'il ne l'est pour aucune autre page.
Toute aide concernant ce problème sera grandement appréciée.
Mise à jour
J'utilise WP verison 4.2.4 et c'est une configuration multisite.
Merci.
if
condition suivante :( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'wp-signup.php' ) && ( is_front_page() || is_home() )