pluginA
でwp_script_is
を使用して、スクリプトがpluginB
からエンキュー/登録されているかどうかをチェックできますか?
私はどちらもAngularを使用する2つのプラグインを持っています。 1つのプラグイン(pluginA)がすべてのページにわたってロードされているangular.min.js
を持っています。もう一方(pluginB)は片方だけにロードされているangular.min.js
を持っています。 pluginA
が既にAngularをエンキューしているかどうかをチェックしたいのですが、pluginB
からそれをやりたいのです。
例えば、私は試した
$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 );
}
しかし、wp_script_is
は何をしようとしてもfalseを返します(私はvar_dump
で二重チェックしました)ので、再びAngularを加えます。
あなたが与えることができるあらゆる助けをありがとう!
更新 - 私はis_plugin_active
を使用している私の特定の問題に対する実用的な解決策を持っています、しかし質問に対する答えがあるなら私はまだ興味があります。ありがとうございます。
$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 );
}
あなたがplugins_loaded
に夢中になっているのを見た今、これはwp_enqueue_scripts
よりずっと早く起動されるので意味があります。この時点で、関数は0を返すと予想されます。
アクションが一般的に起動される順序については、 here および here を参照してください。
他のキューに登録されたスクリプトの後に実行されるように、遅い優先順位で/ = - wp_enqueue_scripts
にアクション を追加してください。それから 登録解除 スクリプトを実行して、新しいパラメータで再度登録することができます。
別のパラメータですでに登録されているハンドルを登録またはエンキューしようとした場合、新しいパラメータは無視されます。代わりに、wp_deregister_script()を使用して、新しいパラメータでスクリプトを再度登録してください。
編集:申し訳ありませんが、私はそれを誤解しています。 is_plugin_active
はアクションフックではなく、スクリプトがエンキューされているかどうかを知らさずにすぐにtrueを返します。それでもやはり、関数wp_script_is
をwp_enqueue_scripts
以降にフックしなければならないことを意味します。
たぶん私は間違っているがWP codexによると:
wp_script_is( string $handle, string $list = 'enqueued' )
$handle
- スクリプトの一意の名前
私が見ることができる限り、あなたは代わりにファイル名を使用していますが、これは間違っています。私は、アクション/フックが起動されたときには何の関係もありません。両方のプラグインがplugins_loaded
上で起動されます。
だから、あなたはこの方法でそれをチェックアウトするなら
$handle = 'MY_SCRIPT_NAME'; /* can't really be $this->plugin_name . '-ajs' because it gives 2 different strings */
どちらのプラグインにも、必要なJSファイルのインスタンスが1つだけロードされます。
あなたは正しい道を進んでいます。スクリプトがエンキューされているかどうかを判断するためのより良い方法はありません。これは効率的な方法です wp_script_is($ handle、$ list)
あなたの$ハンドル名が正しいかどうか疑問に思うだけです。 wp_script_isをチェックしているときに$ handleがpluginBでスクリプトをエンキューするときと同じであることを確認してください。最初のパラメータは$ handleです。 WP Codex を参照してください。
それは言います:
$ handle
(文字列)(必須)スクリプトの名前。一意である必要があります。
私はあなたが他の部分でハンドルとしてプラグイン名を使っていると思います。
同じ名前の "AngularJS"などを使用してみてください。ただし、$ handleと同じである必要があります。