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

29 jun 2011, 11:35:45
Vistas: 45.2K
Votos: 15

Tengo una página llamada "Apple", cuyo ID es 2533.

En el archivo page.php tengo la línea:

echo $bannerimg 

Y esta función en functions.php:

if ( is_page( '2533' ) ) {    
    // también probado con 'Apple'
    $bannerimg = 'apple.jpg';

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

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

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

El problema es que $bannerimg muestra "home.jpg" en todas las páginas, incluyendo Apple, test y admissions.

Incluso he verificado todos los IDs usando the_ID y $page->ID. Nada. Así que supongo que hay algo mal con el código anterior?

1
Comentarios

Una solución en el siguiente hilo me ayudó a resolver un problema similar: https://wordpress.stackexchange.com/questions/225359/is-page-template-is-page-in-functions-php-not-working/225369

Oleksa O. Oleksa O.
19 ene 2019 05:39:41
Todas las respuestas a la pregunta 9
5
17

functions.php se procesa mucho antes de que puedas saber qué página se está cargando. En lugar de asignar valor a una variable, coloca tu código en una función y utiliza esa función en la plantilla page.php.

29 jun 2011 11:41:38
Comentarios

También he probado con este código dentro de una función, pero parece que no devuelve nada. Sé que poner todo en page.php podría ayudar, pero no es muy elegante.

Wordpressor Wordpressor
29 jun 2011 12:01:59

No uso IDs para referenciar páginas, pero el codex muestra que el ID de la página no lleva comillas simples, ¿lo has probado así? `is_page(); // Cuando se muestra cualquier página individual.

is_page(42); // Cuando se muestra la página con ID 42.

is_page('Contacto'); // Cuando se muestra la página con post_title "Contacto".

is_page('sobre-mi'); // Cuando se muestra la página con post_name (slug) "sobre-mi".

is_page(array(42,'sobre-mi','Contacto')); // Devuelve true cuando la página mostrada es el ID 42.` probablemente no sea el caso, pero vale la pena intentarlo

MartinJJ MartinJJ
29 jun 2011 12:09:55

@Martin las comillas no son del todo correctas, pero tampoco romperán nada - por defecto se compara de forma flexible (sin comprobar si coinciden los tipos)

Rarst Rarst
29 jun 2011 13:42:20

¿Qué pasa si quieres agregar un filtro a la consulta? No puedes hacerlo en la plantilla. ¡Pero tampoco puedes hacerlo en el archivo functions.php!

reggie reggie
17 abr 2015 11:16:15

@reggie ¿por qué no? Probablemente deberías hacer una nueva pregunta sobre eso. :)

Rarst Rarst
17 abr 2015 11:17:49
1
10

get_header debería funcionar si deseas dejarlo en functions.php

add_action('get_header', function() {
    if ( is_page( '2533' ) ) {    
    // también probado con 'Apple'
        $bannerimg = 'apple.jpg';

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

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

    } else { 
        $bannerimg = 'home.jpg';
    }  
});
6 mar 2016 04:17:35
Comentarios

¿Por qué funciona exactamente esto? Es lo único que hemos encontrado para que is_page() funcione correctamente dentro del archivo de funciones.

Ian Tearle Ian Tearle
23 nov 2022 11:47:06
0

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

en tu page.php

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

y en tu functions.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';
    }  
}
29 jun 2011 12:24:29
0

Añade esto a tu functions.php, cambia el nombre del script 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);
        }
    }
12 may 2017 21:02:33
0

En functions.php is_page() con el add_action('wp', 'tu_nombre_de_funcion'); funciona correctamente.

10 ene 2021 07:38:44
5

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

Además, is_page acepta un ID sin comillas.

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

29 jun 2011 12:38:34
Comentarios

is_page() puede aceptar un ID como entero también

Bainternet Bainternet
29 jun 2011 12:41:21

sí, pero un entero no debería ir entre comillas

Alex Older Alex Older
29 jun 2011 12:51:07

Eso es extraño, porque veo comillas en todas partes: http://codex.wordpress.org/Conditional_Tags

Wordpressor Wordpressor
29 jun 2011 15:45:21

y es una mala práctica.

Alex Older Alex Older
29 jun 2011 18:12:42

Estoy de acuerdo, el entero no debería ir entre comillas. Pero a PHP no le molestará de ninguna manera.

reggie reggie
17 abr 2015 11:24:42
0

Necesitas llamar a tu función en un punto del proceso de WordPress después de que se establezca la Consulta.

En functions.php:

function mytheme_get_banner_img() {
    if ( is_page( '2533' ) ) {    
        // también probado con '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 tu archivo de plantilla page.php, donde necesites devolver/mostrar $bannerimg:

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

Después, puedes hacer lo que necesites con $bannerimg: colocarlo en una etiqueta <img>, etc.

29 jun 2011 16:11:48
1
if( is_page('Vehículo') ) {
    // código aquí
}

esto definitivamente funcionará en el archivo page.php, por favor muévete allí y verifica.

[Nota]: // reemplaza tu ID de página | slug | array con Vehículo

24 oct 2021 21:16:11
Comentarios

No creo que esto agregue nada a las respuestas existentes, y en mi opinión la respuesta aceptada lo explica mejor.

Rup Rup
25 oct 2021 11:49:28
0

Necesitas enlazar la función wp.

Nota importante: Ten en cuenta que si enlazas a la función init, is_page no funcionará

add_filter('wp', 'pre_fix_function_is_page');

function pre_fix_function_is_page()
{

    if ( is_page( '2533' ) ) {
        // también probado con 'Apple'
        $bannerimg = 'apple.jpg';

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

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

    } else {
        $bannerimg = 'home.jpg';
    }
}
29 nov 2022 17:20:24