Pourquoi is_page ne fonctionne-t-il pas lorsque je le mets dans le fichier functions.php?

10

J'ai une page intitulée "Apple", identifiant de la page identifiant 2533.

Dans le fichier page.php, j'ai la ligne:

echo $bannerimg 

Et cette fonction dans 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';
}  

Le point important est que $ bannerimg renvoie "home.jpg" sur chaque page, y compris Apple, les tests et les admissions.

J'ai même vérifié tous les identifiants à l'aide de the_ID & $ page- > ID. Rien. Donc, je suppose qu’il ya quelque chose qui cloche dans le code ci-dessus?

    
posée Wordpressor 29.06.2011 - 10:35

6 réponses

15

functions.php est traité bien avant que vous puissiez savoir quelle page est en cours de chargement. Au lieu d’attribuer une valeur à une variable, mettez votre code en fonction et utilisez-la dans page.php template.

    
réponse donnée Rarst 29.06.2011 - 10:41
4

En étendant ce que @Rarst a posté et commenté, une solution plus élégante consisterait à créer votre propre filtre dans page.php et à y accrocher une fonction à l'intérieur du fichier functions.php, par exemple:

dans votre page.php

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

et dans votre 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';
    }  
}
    
réponse donnée Bainternet 29.06.2011 - 11:24
4

get_header devrait fonctionner si vous souhaitez le laisser dans 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';
    }  
});
    
réponse donnée Bryan Willis 06.03.2016 - 03:17
1

Ajoutez ceci à votre functions.php, changez le nom du script someCode et le nom de la page:

   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);
        }
    }
    
réponse donnée Vasyl Gutnyk 12.05.2017 - 20:02
0

Vous devez appeler votre fonction à un stade du processus WordPress après la configuration de la requête .

Dans 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;
}

Ensuite, dans votre fichier de modèle page.php , où vous souhaitez renvoyer / générer $bannerimg :

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

Ensuite, vous pouvez faire tout ce dont vous avez besoin avec $bannerimg : déposez-le dans une balise <img> , etc.

    
réponse donnée Chip Bennett 29.06.2011 - 15:11
0

Avez-vous correctement déclaré wp_head(); etc dans votre thème?

De plus, is_page accepte un identifiant sans guillemets.

Le problème peut également provenir du fait que vous êtes déjà sur le modèle de page. Il vaut donc peut-être mieux interroger $post->ID ou configurer page-apple.php

.     
réponse donnée Alex Older 29.06.2011 - 11:38

Lire d'autres questions sur les étiquettes