Google Maps APIを使用したプラグインを開発しています。このようにしてプラグインをエンキューするスクリプトは次のとおりです。
wp_enqueue_script('google-maps', 'http://maps.google.com/maps/api/js?sensor=false&callback=initialize&language=en-us', array('jquery'), false, true);
$handle
は異なる可能性がありますが、他のプラグイン/テーマが同じマップライブラリを使用する可能性があるという事実を考慮すると、wp_script_is($handle,'registered')
の検証は意味がありません。エンキューされたスクリプトを複製するとJSエラーが発生します。You have included the Google Maps API multiple times on this page. This may cause unexpected errors.
説明されていることに関して、私はGoogleマップスクリプトのために$wp_scripts
を検索するコードを作成し、見つかった場合はそれを設定解除します。
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]);
}
}
問題は、削除したスクリプトの依存関係を確認して再割り当てする方法(他のプラグインやテーマで設定されている場合)を確認することです。複数のプラグインがGoogle Maps APIスクリプトの同じ&callback=initialize
パラメータを使用する可能性があることとその処理方法について説明します。
編集: 必要に応じてwp_enqueue_script
を使用し(jQueryの後にヘッダーまたはフッターにエンキュー)、次のような名前のファイルをエンキューします。gmap.js
はプラグインに含まれています
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
これをあなたのJsファイルに書いてください:)
$(document).ready(function() {
if (typeof google === 'object' && typeof google.maps === 'object') {
return;
}else{
$.getScript( 'http://maps.google.com/maps/api/js', function() {});
}
});
それについて強調しないでください。プラグインとテーマがお互いを壊すことができる多くの方法があります、そして、すべてが同じ実行スペース/コンテキストで起こるときあなたはそれを避けることができません。
あなたがあなたのコードがうまく動作することを確かめたいと思うどんなプラグインやテーマに対してもテストするべきですが、あらゆる時点でみんなを幸せにする方法はありません。実際には、あなたのエンキューが他のものよりも優先されるべきであると決めるのはあなたの側からの一種の傲慢です....
すでにキューに入っているスクリプトを削除するのではなく、答えを組み合わせてGoogle Mapsスクリプトをチェックし、@Kikiが推奨するJavaScriptチェックにフォールバックを追加することができます。
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);
}
}