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 page
impostato 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 $classes
all'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-page
classe body
anche alla wp-signup.php
pagina.
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.php
qualifica come la pagina (id) restituita da get_option('page_on_front')
( che restituisce ID
la 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.php
caso, 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.php
e solleva le seguenti domande.
- Perché
is_front_page()
restituire risultati errati? - AFAIK
wp-signup.php
non può mai essere impostato come pagina iniziale utilizzando le impostazioni dell'amministratore di Wordpress, quindi perché il codice wordpress non viene salvato solo controllandoPHP_SELF
oREQUEST_URI
? - Perché
$this->post
a 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.php
come 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.
if
condizione:( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'wp-signup.php' ) && ( is_front_page() || is_home() )