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 pagedé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 $classestableau 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-pageclasse à bodymême sur la wp-signup.phppage.
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.phpqualifie comme la page (id) retournée par get_option('page_on_front')( qui retourne IDla 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.phpcas, 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.phpet soulève les questions suivantes.
- Pourquoi
is_front_page()renvoie des résultats erronés? - AFAIK
wp-signup.phpne 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_SELFouREQUEST_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.phpcomme 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.
ifcondition suivante :( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'wp-signup.php' ) && ( is_front_page() || is_home() )