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() )
Respuestas:
Solo especulaciones, pero me pregunto si te encuentras con un problema de función anónima. Las funciones anónimas están permitidas en WP, y por lo general funcionan bien (suponiendo que PHP actualizado), pero, si busca, encontrará informes de sospechas de errores o al menos de un comportamiento inesperado.
Por lo demás, no estoy seguro de haber visto alguna vez una función anónima utilizada como ejemplo en el Codex de WordPress, y no recuerdo haber visto alguna vez una en el tema y el código del complemento. Por supuesto, no he estado atento a las funciones anon, pero, aun así, creo que la función anterior casi siempre se escribirá en alguna versión del formato de dos partes más familiar, es decir:
Entonces, como experimento, probaría el formato más "convencional" anterior, y también lo probaría con una prioridad designada superior o inferior a 10. Si adjunto múltiples funciones anónimas al mismo filtro, les daría diferentes prioridades, o use una matriz (ejemplo aquí: http://snippets.khromov.se/adding-multiple-actions-and-filters-using-anonymous-functions-in-wordpress/ ), o escriba cada uno de ellos como dos- Parters, también.
En verdad, creo que la forma un poco más larga de 2 partes es más fácil de leer, rastrear y ajustar de todos modos.
fuente
WordPress utiliza diferentes plantillas para páginas en su sitio. Si tiene una plantilla page.php en su tema, se usará para mostrar sus páginas. Si tiene un single.php, se usará para mostrar sus publicaciones individuales. index.php o home.php mostraría su página de inicio, o page.php si tiene una determinada página seleccionada como página de inicio a través de las opciones de lectura.
Entonces, su declaración condicional:
Solo sería realmente útil en el archivo header.php o footer.php- o en page.php si tiene una determinada página seleccionada en las opciones de lectura.
fuente