web-dev-qa-db-fra.com

plugins_url () fonctionne partout mais wp_register_script ()

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?

1
ItsGeorge

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.

3
Milo