Je développe un plugin qui utilise une API Google Maps. Le script de mise en file d'attente du plugin de cette manière:
wp_enqueue_script('google-maps', 'http://maps.google.com/maps/api/js?sensor=false&callback=initialize&language=en-us', array('jquery'), false, true);
Considérant le fait que d'autres plugins/thèmes peuvent utiliser la même bibliothèque de cartes, alors que $handle
pourrait être différent, la validation wp_script_is($handle,'registered')
n'a pas de sens. La duplication du script mis en file d'attente entraîne une erreur JS: You have included the Google Maps API multiple times on this page. This may cause unexpected errors.
En ce qui concerne les choses décrites, j'ai construit un code qui, grâce à la recherche, pensait $wp_scripts
pour les scripts Google Maps et le désactive, au cas où:
global $wp_scripts;
foreach ($wp_scripts->registered as $key => $script) {
if (preg_match('#maps\.google(?:\w+)?\.com/maps/api/js#', $script->src)) {
unset($wp_scripts->registered[$key]);
}
}
La question qui se pose est la suivante: comment vérifier et réaffecter les dépendances des scripts supprimés (au cas où ils seraient définis par d'autres plugins/thèmes). Que se passera-t-il et comment gérer le fait que plusieurs plug-ins peuvent utiliser le même paramètre &callback=initialize
du script API Google Maps.
EDIT: utilisez wp_enqueue_script
comme vous le souhaitez (mettre en file d'attente dans l'en-tête ou le pied de page après jQuery selon votre choix) pour mettre en file d'attente un fichier appelé quelque chose comme: gmap.js
inclus dans votre plugin.
wp_enqueue_script('custom-gmap', plugin_dir_url( __FILE__ ).'inc/js/gmap.js', array('jquery'), false, true);//just change your path and name of file
écrivez ceci dans votre fichier Js :)
$(document).ready(function() {
if (typeof google === 'object' && typeof google.maps === 'object') {
return;
}else{
$.getScript( 'http://maps.google.com/maps/api/js', function() {});
}
});
Ne stresse pas à ce sujet. Les plugins et les thèmes peuvent se briser de plusieurs façons et vous ne pouvez pas l'éviter lorsque tout se passe dans le même espace/contexte d'exécution.
Vous devriez tester tous les plugins et thèmes pour lesquels votre code fonctionne, mais il n’ya aucun moyen de rendre tout le monde heureux à chaque instant. En fait, c’est un peu prétentieux de votre part que de décider que votre file d’attente devrait avoir la priorité sur celle des autres ....
Plutôt que de supprimer un script s'il a déjà été mis en file d'attente, vous pouvez combiner votre réponse pour rechercher le script Google Maps et ajouter la solution de secours au contrôle javascript suggéré par @Kiki ...
add_action('wp_enqueue_scripts','google_maps_script_loader',999);
function google_maps_script_loader() {
global $wp_scripts; $gmapsenqueued = false;
foreach ($wp_scripts->registered as $key => $script) {
if (preg_match('#maps\.google(?:\w+)?\.com/maps/api/js#', $script->src)) {
$gmapsenqueued = true;
}
}
if ($gmapsenqueued) {
wp_enqueue_script('custom-gmap', plugin_dir_url( __FILE__ ).'inc/js/gmap.js', array('jquery'), false, true);
} else {
wp_enqueue_script('google-maps', 'http://maps.google.com/maps/api/js?sensor=false&callback=initialize&language=en-us', array('jquery'), false, true);
}
}