WordPress : Mettre les scripts en file d’attente dans une classe

Publié par Jean-Michel le

J’ai écrit une petite classe qui gérera les files d’attente dans mon thème :

<?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();
    }

}

?>

Je l’appelle juste avant de fermer la balise head, comme :

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

Mais cela ne fonctionne pas. Il n’y a pas d’erreur, mais aucun script n’est ajouté. Des idées ?

Solution n°1 trouvée

Vous voulez dire que vous appelez votre classe juste avant de fermer la balise HTML ? Il est alors trop tard pour mettre les scripts en file d’attente.

Ne vous connectez pas wp_print_scriptspour mettre vos scripts et vos styles en file d’attente. Je viens d’apprendre cela aujourd’hui de Rarst.

Changez donc votre fonction init_hooks en quelque chose comme ceci :

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

De plus, vous utilisez les fonctions wp_register_scriptet wp_enqueue_scriptpour mettre vos styles en file d’attente, WordPress a des fonctions distinctes pour mettre en file d’attente vos styles wp_register_styleet wp_enqueue_style. Votre include_css_filesdevrait ressembler à :

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

Passons maintenant à l’instanciation de votre classe et à l’appel de init_hooks. Vous pouvez soit le placer directement dans votre functions.php, soit utiliser l’action init pour instancier votre classe.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *