Je devrais donc probablement mentionner dès le départ que je développe un plugin, mon URL est donc "mysite.com/plugin" (juste au cas où cela serait lié à mon problème).
Donc, dans mon fichier de plugin principal (myplugin.php), j'ai ajouté ce qui suit:
$plugin_url = plugins_url('/my-plugin-directory/');
immédiatement suivi de
wp_enqueue_style('wp_enqueue_scripts', $plugin_url . 'css/boxes.css');
Super, jusqu'ici tout va bien. Le plugin url est correctement concaténé et le script est ajouté à la page et apparaît dans le source sous le nom
<link rel='stylesheet' id='wp_enqueue_scripts-css' href='http://mysite.com/plugin/wp-content/plugins/my-plugin-directory/css/mystyle.css?ver=3.5.1' type='text/css' media='all' />
à ce stade, je peux même echo $plugin_url;
qui renvoie:
http://mysite.com/plugin/wp-content/plugins/my-plugin-directory/
Juste en dessous, j'ai écrit la fonction suivante:
add_action("wp_enqueue_scripts", "my_jquery_enqueue", 11);
function my_jquery_enqueue() {
wp_enqueue_script('jquery');
wp_register_script('jquery_masonry', $plugin_url.'js/jquery.masonry.min.js', array('jquery'), '2.0.110526' );
wp_enqueue_script('jquery_masonry');
}
Devrait travailler correctement? Ce n'est pas. Dans la source, cela ressemble à ceci:
<script type='text/javascript' src='http://georgespake.com/pluginjs/jquery.masonry.min.js?ver=2.0.110526'></script>
Boooo ...
Donc pour le moment, je viens de l'écrire:
/****Add jquery stuff to header****/
add_action("wp_enqueue_scripts", "my_jquery_enqueue", 11);
function my_jquery_enqueue() {
wp_enqueue_script('jquery');
wp_register_script('jquery_masonry', $plugin_url . '/wp-content/plugins/my-plugin-directory/js/jquery.masonry.min.js', array('jquery'), '2.0.110526' );
wp_enqueue_script('jquery_masonry');
}
C’est un peu louche car c’est le seul endroit où je dois faire cela. Partout ailleurs, le $plugin_url
semble renvoyer la chaîne appropriée. Qu'est-ce que j'oublie ici?
Ceci est un problème de PHP, non spécifique à WordPress. Je suggère de lire la documentation PHP sur variable scope pour comprendre pourquoi cela ne fonctionne pas.
Aucune variable $plugin_url
n'est définie dans l'étendue de votre fonction my_jquery_enqueue
; vous devez d'abord appeler global $plugin_url;
dans la fonction pour y accéder, bien que je ne suggère pas d'utiliser quelque chose d'aussi générique que $plugin_url
.
Personnellement, je créerais une classe pour que le plugin encapsule tout et ne pollue pas la portée globale.