WordPress : Mettre les scripts en file d’attente dans une classe
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_scripts
pour 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_script
et wp_enqueue_script
pour mettre vos styles en file d’attente, WordPress a des fonctions distinctes pour mettre en file d’attente vos styles wp_register_style
et wp_enqueue_style
. Votre include_css_files
devrait 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.
0 commentaire