wp_script_is
utilisé dans pluginA
peut-il vérifier si un script est mis en file d'attente/enregistré à partir de pluginB
?
J'ai deux plugins qui utilisent tous deux angulaire. Un plugin (pluginA) a angular.min.js
chargé sur toutes les pages. L'autre (pluginB) a angular.min.js
en cours de chargement sur un seul. Je voudrais vérifier si pluginA
a déjà mis en file d'attente Angular mais je souhaite le faire à partir de pluginB
.
Par exemple, j'ai essayé
$handle = 'myAppScript.min.js' // this is a concatenated/minified version of the entire pluginA angular app.
$list = 'enqueued' // I also tried all the other $list options.
// if 'myAppScript.min.js' is present, don't register Angular again, otherwise register it.
if (wp_script_is($handle, $list)) {
return;
} else {
wp_register_script( $this->plugin_name . '-ajs', plugin_dir_url(__FILE__) . 'js/angular/angular.min.js', array(), $this->version, false );
}
Cependant, wp_script_is
renvoie false, quoi que j'essaie (j'ai vérifié avec un var_dump
) et ajoute donc à nouveau Angular.
Merci pour toute l'aide que vous pouvez nous apporter!
Mise à jour - J'ai une solution efficace à mon problème particulier en utilisant is_plugin_active
, mais je suis toujours curieux de savoir s'il existe une réponse à la question. Merci!
$plugin = 'pluginA/pluginA.php';
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if (!is_plugin_active($plugin)) {
wp_register_script( $this->plugin_name . '-ajs', plugin_dir_url(__FILE__) . 'js/angular/angular.min.js', array(), $this->version, false );
}
Maintenant que je vois que vous étiez accroché à plugins_loaded
, cela a du sens car il est déclenché beaucoup plus tôt que wp_enqueue_scripts
. Il est prévu que votre fonction renvoie 0 à ce stade.
Voir ici et ici pour l'ordre dans lequel les actions sont généralement déclenchées.
Essayez de ajoutez une action à wp_enqueue_scripts
avec une priorité tardive pour vous assurer qu’elle s’exécute après d’autres scripts mis en file d’attente. Ensuite, vous pouvez désinscrire le script et vous enregistrer à nouveau avec de nouveaux paramètres.
Si vous essayez d'enregistrer ou de mettre en file d'attente un descripteur déjà enregistré avec différents paramètres, les nouveaux paramètres seront ignorés. Utilisez plutôt wp_deregister_script () et enregistrez le script à nouveau avec les nouveaux paramètres.
Edit: Désolé, j'ai mal interprété cela. is_plugin_active
n'est pas un crochet d'action et retournera immédiatement true sans vous dire si le script est mis en file d'attente. Il reste que vous devez accrocher la fonction wp_script_is
à wp_enqueue_scripts
ou plus tard.
Peut-être que je me trompe mais selon le codex WP:
wp_script_is( string $handle, string $list = 'enqueued' )
$handle
- nom unique du script
Autant que je sache, vous utilisez à la place FILE NAME, ce qui est faux. Pour moi, cela n'a rien à voir avec le moment où des actions/hooks sont activés car vos deux plugins sont déclenchés sur plugins_loaded
.
Donc, si vous vérifiez de cette façon
$handle = 'MY_SCRIPT_NAME'; /* can't really be $this->plugin_name . '-ajs' because it gives 2 different strings */
dans vos deux plugins, une seule instance du fichier JS requis sera chargée.
Vous êtes sur le bon chemin. Il n'y a pas de meilleur moyen de déterminer si le script est mis en file d'attente ou non. C'est un moyen efficace wp_script_is ($ handle, $ list)
Je me demandais si votre nom de pseudo $ est correct. Assurez-vous que $ handle lors de la vérification de wp_script_is est le même que lorsque vous mettez en file d'attente le script dans pluginB. Le premier paramètre est $ handle. Reportez-vous à ce WP Codex .
Ça dit:
$ handle
(chaîne) (Obligatoire) Nom du script. Doit être unique.
Je crois que vous utilisez le nom du plugin comme une poignée dans une autre partie.
Essayez d'utiliser le même nom "AngularJS" ou quelque chose mais doit être identique à $ handle