4

I have written a small class that will handle enqueues in my theme :

<?php

class Header {

    public function init_hooks()
    {
        add_action('wp_print_scripts', array(__CLASS__,'include_all_files'));
    }

    public function include_css_files()
    {
        wp_register_script('style.css', get_bloginfo('stylesheet_url'));
        wp_enqueue_script('style.css');
    }

    public function include_js_files()
    {
        wp_register_script('jquery-min', "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js");
        wp_enqueue_script('jquery-min');        
    }

    public function include_all_files()
    {
        $this->include_css_files();
        $this->include_js_files();
    }

}

?>

I call it right before closing the head tag, like :

$header = new Header();
$header->init_hooks(); 

But it does not work. There is no error, but no script is added. Any ideas ?

1
  • You're code is running after scripts have been output(you said just before the closing <head> tag, that's too late for the enqueues. The code needs to run before wp_head() does..
    – t31os
    Commented Jun 30, 2011 at 11:06

1 Answer 1

3

You mean you call your class right before closing HTML tag? It is too late to enqueue scripts then.

Don't hook into wp_print_scripts to enqueue your scripts and styles. I just learned this today from Rarst.

So change your init_hooks function to something like following:

public function init_hooks()
{
    add_action('wp_enqueue_scripts', array(__CLASS__,'include_all_files'));
}

Also you are using wp_register_script and wp_enqueue_script functions to enqueue your styles, Wordpress has separate functions to enqueue your styles wp_register_style and wp_enqueue_style. Your include_css_files should look like:

public function include_css_files()
{
    // NOTE: you don't really have to use the filename as style slug.
    wp_register_style('my_style', get_bloginfo('stylesheet_url'));
    wp_enqueue_style('my_style');
}

Now about instantiating your class and calling init_hooks. You can either place it directly inside your functions.php, or you can use the init action to instantiate your class.

5

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.