¿Por qué no funciona is_page cuando lo coloco en el archivo functions.php?

10

Tengo una página llamada "Apple", la ID de identificación de la página 2533.

En el archivo page.php tengo línea:

echo $bannerimg 

Y esta función en functions.php:

if ( is_page( '2533' ) ) {    
    // also tested with 'Apple'
    $bannerimg = 'apple.jpg';

} elseif ( is_page( 'test' ) ) {    
    $bannerimg = 'test.jpg';

} elseif ( is_page( 'admissions' ) ) { 
    $bannerimg = 'admissions.jpg';

} else { 
    $bannerimg = 'home.jpg';
}  

El punto es el $ bannerimg se hace eco de "home.jpg" en cada página, incluyendo Apple, pruebas y admisiones.

Incluso he verificado todas las ID usando the_ID & $ page- > ID. Nada. Entonces, ¿supongo que hay algún problema con el código anterior?

    
pregunta Wordpressor 29.06.2011 - 10:35

6 respuestas

15

functions.php se procesa mucho antes de que pueda saber qué página se está cargando. En lugar de asignar valor a la variable, ponga su código en función y use esa función en la plantilla page.php .

    
respondido por el Rarst 29.06.2011 - 10:41
4

Extendiendo lo que @Rarst publicó y comentó, una solución más elegante sería crear su propio filtro dentro de page.php y enlazarlo desde una función dentro de functions.php, por ejemplo:

en tu page.php

$bannerimg = apply_filters('my_bannerimg','defualt_img.jpg');

y en tus funciones.php

add_filter('my_bannerimg','what_page_is_it');

function what_page_is_it($img){
    if ( is_page( '2533' ) ) {    
        return 'apple.jpg';
    } elseif ( is_page( 'test' ) ) {    
        return 'test.jpg';
    } elseif ( is_page( 'admissions' ) ) { 
        return 'admissions.jpg';
    } else { 
        return 'home.jpg';
    }  
}
    
respondido por el Bainternet 29.06.2011 - 11:24
4

get_header debería trabajar si desea dejarlo en functions.php

add_action('get_header', function() {
    if ( is_page( '2533' ) ) {    
    // also tested with 'Apple'
        $bannerimg = 'apple.jpg';

    } elseif ( is_page( 'test' ) ) {    
        $bannerimg = 'test.jpg';

    } elseif ( is_page( 'admissions' ) ) { 
        $bannerimg = 'admissions.jpg';

    } else { 
        $bannerimg = 'home.jpg';
    }  
});
    
respondido por el Bryan Willis 06.03.2016 - 03:17
1

Agregue esto a su functions.php, cambie el nombre de la secuencia de comandos someCode y el nombre de la página:

   add_action('wp_enqueue_scripts', 'wpt_theme_js');

    function wpt_theme_js() { 
        if ( is_page('somePage') ) {
            wp_enqueue_script('someCode_js', get_template_directory_uri() . '/js/someCode.js', '', '', true);
        }
    }
    
respondido por el Vasyl Gutnyk 12.05.2017 - 20:02
0

Debe llamar a su función en un punto del proceso de WordPress después de configurar la consulta .

En functions.php :

function mytheme_get_banner_img() {
    if ( is_page( '2533' ) ) {    
        // also tested with 'Apple'
        $bannerimg = 'apple.jpg';

    } elseif ( is_page( 'test' ) ) {    
        $bannerimg = 'test.jpg';

    } elseif ( is_page( 'admissions' ) ) { 
        $bannerimg = 'admissions.jpg';

    } else { 
        $bannerimg = 'home.jpg';
    }  
    return $bannerimg;
}

Luego, en su archivo de plantilla page.php , donde sea que necesite devolver / output $bannerimg :

<?php
$bannerimg = mytheme_get_banner_img();
?>

Luego, puedes hacer lo que necesites con $bannerimg : soltarlo en una etiqueta <img> , etc.

    
respondido por el Chip Bennett 29.06.2011 - 15:11
0

¿Has declarado correctamente wp_head(); etc. en tu tema?

Además, is_page acepta una ID sin comillas.

El problema también puede ser el hecho de que ya esté en la plantilla de la página, por lo que es una página, puede que sea mejor consultar el $post->ID o configurar page-apple.php

    
respondido por el Alex Older 29.06.2011 - 11:38

Lea otras preguntas en las etiquetas