15

I have page called "Apple", the page's ID id 2533.

In page.php file I have line:

echo $bannerimg 

And this function in 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';
}  

The point is the $bannerimg echoes "home.jpg" on every page, including Apple, test and admissions.

I've even checked all the IDs using the_ID & $page->ID. Nothing. So I guess there's something wrong with the code above?

1

9 Answers 9

17

functions.php is processed way before you can know which page is being loaded. Instead of assigning value to variable put your code into function and use that function in page.php template.

5
  • I've tried with this code inside of a function as well, but seems like it returns nothing. I know putting it all into page.php should help, but is not so elegant. Commented Jun 29, 2011 at 9:01
  • I dont use id's for page reference but codex shows that the id of the page has no single quotes, have you tried that? is_page(); // When any single Page is being displayed. is_page(42); // When Page 42 (ID) is being displayed. is_page('Contact'); // When the Page with a post_title of "Contact" is being displayed. is_page('about-me'); // When the Page with a post_name (slug) of "about-me" is being displayed. is_page(array(42,'about-me','Contact')); // Returns true when the Pages displayed is either post ID 42. probably not the case but worth a shot
    – MartinJJ
    Commented Jun 29, 2011 at 9:09
  • 1
    @Martin quotes are not entirely correct, but won't break anything either - it is loosely compared by default (without checking if type matches)
    – Rarst
    Commented Jun 29, 2011 at 10:42
  • What if you want to add a filter to the query? You can't do that in the template. But you can't do it in the functions.php file, either!
    – reggie
    Commented Apr 17, 2015 at 8:16
  • @reggie why not? You should probably ask new question about it. :)
    – Rarst
    Commented Apr 17, 2015 at 8:17
10

get_header should work if you want to leave it in 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';
    }  
});
1
  • Why exactly does this work? It's the only thing we've found to successfully make is_page() work within functions file.
    – Ian Tearle
    Commented Nov 23, 2022 at 9:47
4

Extending what @Rarst posted and you commented , a more elegant solution would be to create your own filter inside page.php and hook to it from a function inside the functions.php, for example:

in you page.php

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

and in your 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';
    }  
}
1

Add this to your functions.php, change name of script someCode and name of 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

In functions.php is_page() with the add_action('wp', 'your_function_name'); works fine.

0

You need to call your function at a point in the WordPress process after the Query is set up.

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

Then, in your page.php template file, wherever you need to return/output $bannerimg:

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

Then, you can do whatever you need to with $bannerimg: drop it in an <img> tag, etc.

0

Have you correctly declared wp_head(); etc in your theme?

Also, is_page accepts an ID without quotes.

The problem may also be the fact you are already on the page template so it is a page, you may be better of querying the $post->ID or set up page-apple.php

5
  • is_page() can accept ID as integer as well
    – Bainternet
    Commented Jun 29, 2011 at 9:41
  • yeah but an int shouldn't be quoted
    – Alex Older
    Commented Jun 29, 2011 at 9:51
  • That's strange, because I see quotes everywhere: codex.wordpress.org/Conditional_Tags Commented Jun 29, 2011 at 12:45
  • and it's a bad practice.
    – Alex Older
    Commented Jun 29, 2011 at 15:12
  • I agree, the integer should not be quoted. But PHP will not mind either way.
    – reggie
    Commented Apr 17, 2015 at 8:24
0
if( is_page('Vehicle') ) {
    // code here
}

this will definitely work on page.php file please move there and check.

[NB]: // replace your page id | slug | array with Vehicle

1
  • I don't think this adds anything to the existing answers, and IMO the accepted answer explains it better.
    – Rup
    Commented Oct 25, 2021 at 8:49
0

You need to hook the wp function.

Important note: Note that if you hook to the init function, is_page will not work

add_filter('wp', 'pre_fix_function_is_page');

function pre_fix_function_is_page()
{

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.