web-dev-qa-db-fra.com

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

J'ai la page appelée "Apple", l'identifiant de la page ID 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 y a quelque chose qui cloche dans le code ci-dessus?

10
Wordpressor

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 dans une fonction et utilisez-la dans le modèle page.php.

15
Rarst

get_header devrait travailler si vous voulez 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';
    }  
});
5
Bryan Willis

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 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';
    }  
}
4
Bainternet

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);
        }
    }
1
Vasyl Gutnyk

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 est donc préférable d’interroger le $post->ID ou de configurer le page-Apple.php.

0
Alex Older

Vous devez appeler votre fonction à un stade du processus WordPress une fois la requête configurée .

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, à chaque fois que vous devez renvoyer/générer $bannerimg:

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

Ensuite, vous pouvez faire ce que vous voulez avec $bannerimg: déposez-le dans une balise <img>, etc.

0
Chip Bennett