Añadir hook de acción condicionalmente - solo cuando se usa home.php

10 oct 2012, 21:29:28
Vistas: 16.3K
Votos: 4

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;
0
Todas las respuestas a la pregunta 3
1

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...

10 oct 2012 23:14:55
Comentarios

¿Quisiste decir: is_home() && $template_file == 'home.php' ?

Bryan Bryan
14 jul 2017 00:49:44
0

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:

  1. 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
*/
  1. Luego creé una nueva página vacía configurando Inicio como plantilla de página.
  2. Configuré WordPress para mostrar mi nueva página como página frontal (Ajustes > Lectura > Una página estática > Página frontal: Inicio)
  3. 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ía false. 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.

8 sept 2015 03:12:57
0

La función que estás buscando es is_front_page()

add_action('template_redirect', 'work_only_on_front_page', 10);
   function work_only_on_front_page(){
    if ( is_front_page() ) {
    // Tu código
   }
}
18 abr 2018 17:33:09