Tengo un problema bastante básico del que me sorprende que WP no tenga una solución nativa (a menos que esté pasando por alto algo, con suerte).
Tengo un sitio WP con static page
set como portada en la configuración de lectura. En un código de complemento, estoy tratando de determinar si WP está mostrando la página principal y agregar una clase a la $classes
matriz si es así. Estoy usando el siguiente código para lograrlo
add_filter('body_class', function($classes){
if(is_front_page() || is_home()){
$classes[] = 'home-page';
}
return $classes;
});
Estoy usando ambos is_front_page()
y is_home()
en caso de que la configuración de la página principal cambie de página estática a diseño de blog en el futuro.
El problema que encuentro es que este código agrega home-page
clase body
incluso en la wp-signup.php
página.
Inspeccionar el código revela que las is_front_page()
llamadas WP_Query::is_front_page()
, que esencialmente devuelve resultados de WP_Query::is_page(get_option('page_on_front'))
. Entonces, la raíz del problema es que wp-signup.php
califica como la página (id) devuelta por get_option('page_on_front')
( que devuelve ID
la página estática configurada como portada en configuración> lectura ).
WP_Query::is_page()
utiliza WP_Query::get_queried_object()
internamente para decidir si la página actual es la página presente en los argumentos del método. En el wp-signup.php
caso, el código que establece el objeto consultado actual es el siguiente
/*...other code... */
elseif ( $this->is_singular && ! empty( $this->post ) ) {
$this->queried_object = $this->post;
$this->queried_object_id = (int) $this->post->ID;
}
/*...other code... */
Esto muestra que wordpress, por alguna razón, consulta la página principal para mostrar wp-signup.php
y plantea las siguientes preguntas.
- ¿Por qué
is_front_page()
está devolviendo resultados incorrectos? - AFAIK
wp-signup.php
nunca se puede establecer como página de inicio utilizando la configuración de administrador de Wordpress, entonces ¿por qué el código de Wordpress no se rescata simplemente al marcarPHP_SELF
oREQUEST_URI
? - ¿Por qué WP_Query tiene la página de inicio actual
$this->post
en este momento?
He descartado el problema de los complementos eliminando el directorio de complementos (y complementos mu). Todavía califica wp-signup.php
como portada donde no lo hace para ninguna otra página.
Cualquier ayuda con respecto a este tema será muy apreciada.
Actualización
Estoy usando WP verison 4.2.4 y es una configuración multisitio.
Gracias.
if
condición:( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'wp-signup.php' ) && ( is_front_page() || is_home() )