web-dev-qa-db-fra.com

Testez pour voir si un prototype est installé dans un autre plugin?

Dans mon plugin, je veux tester si jQuery ou Prototype (ou les deux) vont être chargés par un autre plugin. Donc, avez wp_enqueue_script('jquery') ou wp_enqueue_script('prototype') déjà été appelé.

J'ai le code approprié à mon plugin dans les fichiers plugin.prototype.js et plugin.jquery.js et si Prototype est en file d'attente, mon plugin utilisera plugin.prototype.js. De cette façon, j'évite de charger plus que nécessaire sur le site. Si aucun des deux n'a chargé, je ferai la queue selon le plus petit.

Comment puis-je tester pour voir ce qui a été mis en file d'attente? Comment puis-je m'assurer que mon code fonctionne en dernier?

5
artlung

Utilisez wp_script_is() pour vérifier si un script est dans la file d'attente.

function add_my_scripts() {
    $doing_jquery = wp_script_is('jquery', 'queue');
    $doing_prototype = wp_script_is('prototype', 'queue');

    var_dump($doing_jquery, $doing_prototype);
}
add_action('wp_print_scripts', 'add_my_scripts');
11
Annika Backstrom

Pour vous assurer que votre code est exécuté après le chargement de jQuery ou de Prototype, utilisez le paramètre $deps pour wp_enqueue_script, puis transmettez array('jquery') ou array('prototype'). Si vous voulez savoir si un script est dans la file d'attente, vous pouvez utiliser la méthode query() de WP_Dependencies ( qui est la superclasse de WP_Scripts ). Donc, quelque chose comme ça devrait marcher:

global $wp_scripts;
$jQueryIsLoaded = (bool) $wp_scripts->query('jquery');
$prototypeIsLoaded = (bool) $wp_scripts->query('prototype');

Bien sûr, les plugins peuvent les mettre en file d'attente une fois que vous en avez décidé un, alors essayez de vous assurer d'exécuter cette vérification au dernier moment possible.

2
Jan Fabry