is_front_page solo funciona en el archivo de tema, y no funciona en functions.php

3

Si uso is_front_page () en mi archivo front-page.php, funciona como se esperaba. Sin embargo, si utilizo la misma función en mi archivo de funciones de tema.php, no funciona. ¿Es este el comportamiento normal? Si no, ¿puede ser una solución de problemas de alguna manera?

En configuración- > lectura tengo mi página principal configurada en una página llamada "página frontal", así que creo que está todo configurado.

EDIT

agregar lo siguiente a functions.php no funciona, sin embargo, prometo que funcionará como se esperaba si agrego is_home_page () a mi archivo header.php

add_action('init', 'my_test');

function my_test(){
    if(is_front_page())
        echo 'is it?';
}
    
pregunta Mike 09.02.2012 - 20:36

4 respuestas

5

Ese comportamiento tal vez normal, dependiendo de cómo está usando exactamente is_front_page en su archivo de funciones.

Si simplemente lo colocaste dentro del archivo, no va a funcionar. ¿Por qué? Porque WordPress carga functions.php antes de que el objeto $ wp_query se haya configurado con la página actual. is_front_page es una envoltura alrededor de $wp_query->is_front_page() , y si la consulta no se ha configurado, siempre devolverá falso (o emitirá una advertencia, si tiene wp_debug en.

Desde el códice:

  

Advertencia: solo puede usar etiquetas de consulta condicionales después de la acción de inicio   Enganche en WordPress. Para temas, esto significa que la etiqueta condicional   nunca funcione correctamente si lo está utilizando en el cuerpo de functions.php,   es decir, fuera de una función.

enlace

    
respondido por el chrisguitarguy 09.02.2012 - 20:43
4

Este es el comportamiento esperado. El archivo functions.php se analiza antes de que la consulta esté configurada y esté disponible, por lo tanto, si tiene if ( is_front_page() ) desnudo dentro de functions.php , devolverá false, porque todavía no hay ninguna consulta.

Lo que debe hacer es poner su is_front_page() condicional dentro de una función de devolución de llamada , que es entonces conectado a una acción adecuada , es decir, una acción que se activa después de , la consulta está configurada / disponible.

Para referencia, pienso functions.php se analiza en plugins_loaded ( podría ser setup_theme ), y los condicionales de consulta deberían estar disponibles en o después init .

Editar

  

plugins_loaded y setup_theme no funcionan para mí

Por supuesto, esos enganches no funcionarán para ti. Se activan antes de configurar la consulta . El condicional is_front_page() solo está disponible después de configurar la consulta , lo que sucede en init .

  

Necesito eliminar_acción () si el usuario está viendo la página principal.

Realmente no nos estás diciendo exactamente lo que estás tratando de hacer. Su pregunta simplemente se hizo cuando is_front_page() estaba disponible, que es lo que respondimos. Saber cómo / cuándo eliminar una acción es una pregunta en su mayoría completamente diferente. Debe proporcionar la llamada add_action() que desea eliminar.

    
respondido por el Chip Bennett 09.02.2012 - 20:45
4

¡La cita del códice por chrisguitarguy ya no es válida! Se ha actualizado a:

  

Advertencia: solo puede usar etiquetas de consulta condicionales después de el enlace de acción posts_selection en WordPress ( el enlace de acción wp es el primero a través del cual puede usar estos condicionales ). Para los temas, esto significa que la etiqueta condicional nunca funcionará correctamente si la está utilizando en el cuerpo de functions.php, es decir, fuera de una función.

Por lo tanto, el gancho init ya no funciona. Como se indicó, el enlace wp es el primer enlace que puede usar si desea usar etiquetas de consulta condicionales. Por lo tanto, para hacer que las etiquetas condicionales funcionen, aquí está la placa de preparación mínima:

add_action('wp', 'function_that_uses_conditional_tags');

function function_that_uses_conditional_tags() {
    // place code here
}

Sin embargo, tenga en cuenta que, si bien esa "advertencia" parece universalmente aplicable a las etiquetas condicionales, tal como aparece en la introducción a la página del códice sobre Conditional Etiquetas , no logra enfatizar que realmente solo se aplica a la interfaz.

El gancho wp ni siquiera se dispara en el backend! Entonces, si lo usa por ejemplo con is_admin (), nunca se evaluará como true . Use un gancho diferente en ese caso. En realidad, init funciona bien para is_admin ();).

    
respondido por el Stephen Miller 17.04.2017 - 17:05
1

Los enganches anteriores que trabajan con las etiquetas de plantilla son wp action hook. Todos los enlaces anteriores a ese como init hook no funcionarán para etiquetas de plantilla como is_front_page ()

    
respondido por el chifliiiii 06.06.2016 - 15:17

Lea otras preguntas en las etiquetas