why doesnt is_home() work in functions.php

I’m pulling in scripts.php through functions.php. this is in scripts.php but for some reason, wordpress isn’t recognizing is_home(). i’ve tried resetting the query, but to no avail. Am I hooking into the right function?

if(is_home()){

function my_scripts_method2() {
    wp_register_script('cycle', get_template_directory_uri() . '/js/cycle.js', array('jquery'));
    wp_enqueue_script('cycle');
}
add_action('wp_enqueue_scripts', 'my_scripts_method2');

function my_scripts_method() {
    wp_register_script('homepage', get_template_directory_uri() . '/js/homepage.js', 'cycle');
    wp_enqueue_script('homepage');
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
}

Related posts

Leave a Reply

2 comments

  1. At the time functions.php is included during bootup, WordPress has no idea on the contents of the query, and doesn’t know the nature of the page. is_home will return false.

    Wrap the code in a function and have it triggered by the wp hook, which comes after the global query object has been hydrated with data.

    add_action( 'wp', 'wpse47305_check_home' );
    function wpse47305_check_home() {
        if ( is_home() )
            add_action( 'wp_enqueue_scripts', 'my_scripts' );
    }
    
    function my_scripts() {
        ...
    }
    

    The wp_enqueue_scripts action runs after wp.

    http://codex.wordpress.org/Plugin_API/Action_Reference#Actions_Run_During_a_Typical_Request

  2. try with $_SERVER[REQUEST_URI] .
    It works for me 😉 In my case I have this script for charging the enqueue scripts only on the front:

    if ($_SERVER[REQUEST_URI]=='/'){
        add_action('wp_enqueue_scripts', '***********');
    }
    

    echo the $_SERVER[REQUEST_URI] and you’ll see his value for each page you are so you can work with it 😉