Ho un problema piuttosto basilare per cui sono sorpreso che WP non abbia una soluzione nativa (a meno che non stia trascurando qualcosa, si spera).
Ho un sito WP con static pageimpostato come prima pagina nelle impostazioni di lettura. In un codice plug-in, sto cercando di determinare se WP sta visualizzando la prima pagina e aggiungere una classe $classesall'array se è vero. Sto usando il seguente codice per realizzarlo
add_filter('body_class', function($classes){
if(is_front_page() || is_home()){
$classes[] = 'home-page';
}
return $classes;
});
Sto usando entrambi is_front_page()e is_home()nel caso in cui l'impostazione della prima pagina cambi da layout di pagina statica a blog in futuro.
Il problema che sto riscontrando è che questo codice aggiunge home-pageclasse bodyanche alla wp-signup.phppagina.
L'ispezione del codice rivela che le is_front_page()chiamate WP_Query::is_front_page(), che essenzialmente restituiscono risultati di WP_Query::is_page(get_option('page_on_front')). Quindi la radice del problema è che si wp-signup.phpqualifica come la pagina (id) restituita da get_option('page_on_front')( che restituisce IDla pagina statica impostata come prima pagina in impostazioni> lettura ).
WP_Query::is_page()utilizza WP_Query::get_queried_object()internamente per decidere se la pagina corrente è la pagina presente negli argomenti del metodo. Nel wp-signup.phpcaso, il codice che imposta l'oggetto interrogato corrente è il seguente
/*...other code... */
elseif ( $this->is_singular && ! empty( $this->post ) ) {
$this->queried_object = $this->post;
$this->queried_object_id = (int) $this->post->ID;
}
/*...other code... */
Questo dimostra che wordpress, per qualche motivo, interroga la prima pagina per visualizzare wp-signup.phpe solleva le seguenti domande.
- Perché
is_front_page()restituire risultati errati? - AFAIK
wp-signup.phpnon può mai essere impostato come pagina iniziale utilizzando le impostazioni dell'amministratore di Wordpress, quindi perché il codice wordpress non viene salvato solo controllandoPHP_SELFoREQUEST_URI? - Perché
$this->posta questo punto WP_Query ha la home page corrente ?
Ho escluso il problema dei plug- in rimuovendo la directory dei plug-in (e mu-plugins). Si qualifica ancora wp-signup.phpcome prima pagina dove non lo è per qualsiasi altra pagina.
Qualsiasi aiuto in merito a questo problema sarà molto apprezzato.
Aggiornamento
Sto usando WP versione 4.2.4 ed è una configurazione multisito.
Grazie.
ifcondizione:( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'wp-signup.php' ) && ( is_front_page() || is_home() )