Añadir hook de acción condicionalmente - solo cuando se usa home.php
Estoy intentando añadir un hook de acción en functions.php solo si la página es home.php
pero lo siguiente no funciona:
if ( is_page_template("home.php") ) {
// hacer algo
}
Para asegurarme de que el archivo que se está usando es home.php
hago esto:
global $template; echo $template;
Utiliza is_home
en lugar de is_page_template
, ya que este último no funcionará para home.php
ya que técnicamente no es una plantilla de página en el sentido tradicional.
add_action('template_redirect', 'are_we_home_yet', 10);
function are_we_home_yet(){
if ( is_home() ) {
//tu lógica aquí
}
}
Versión revisada:
add_action('template_redirect', 'are_we_home_yet', 10);
function are_we_home_yet(){
global $template;
$template_file = basename((__FILE__).$template);
if ( is_home() && $template_file = 'home.php' ) {
//ejecuta tu lógica aquí
}
}
La respuesta revisada es realmente lo que necesitas, verificará si estás en la página de inicio, además de obtener el archivo de plantilla que se está incluyendo y comprobará si ese archivo es efectivamente tu archivo home.php
y si es así, puedes proceder con tu lógica...

Tuve este problema. Quería incluir los scripts de Jssor Slider solo al cargar la página de inicio. Estaba usando un archivo home.php también, y lo resolví de esta manera:
- Renombré mi archivo home.php a algo diferente, como home_misitio.php estableciendo un nombre para esta plantilla de página en el comentario superior del archivo, así:
/** * Template Name: Inicio */
- Luego creé una nueva página vacía configurando Inicio como plantilla de página.
- Configuré WordPress para mostrar mi nueva página como página frontal (
Ajustes > Lectura > Una página estática > Página frontal: Inicio
) - Finalmente, me di cuenta de que era necesario poner el código condicional dentro de mi función para que
is_page('inicio')
funcionara. ('inicio' es el slug de mi nueva página de inicio vacía). Es decir, cuando intentaba agregar condicionalmente la acción, no podía verificar si mi página de inicio se estaba cargando,is_page('inicio')
siempre devolvíafalse
. Funcionó cuando cambié la lógica para siempre agregar la acción pero cargar condicionalmente los scripts.
El código que funcionó en functions.php:
function misitio_jssor() {
//cargar condicionalmente el script
if ( is_page('inicio') ) {
wp_enqueue_script( 'jssor', get_stylesheet_directory_uri() . '/js/jssor.js', array( 'jquery' ), false, false );
}
}
//siempre agrega la acción
add_action( 'wp_enqueue_scripts', 'misitio_jssor' );
De esta manera, mis scripts de Jssor se cargan solo al acceder a la página de inicio, no al acceder a otras páginas o publicaciones.
