管理ページにアクセスすると、コンソールにこのエラーが表示されます。
GET https://example/test/wp-content/plugins/home/account/public_html/wp-content/themes/mytheme-theme/inc/custom-script.js?ver=4.9.4 net::ERR_ABORTED
以下のコードまでエラーを追跡しました。
function theme_add_color_picker( $hook ) {
if( is_admin() ) {
wp_enqueue_style( 'wp-color-picker' );
wp_enqueue_script( 'custom-script-handle', plugins_url( 'custom-script.js', __FILE__ ), array( 'wp-color-picker' ), false, true );
wp_enqueue_script( 'admin-color-picker', get_template_directory_uri() . '/javascripts/admin/admin-color-picker.js', array( 'jquery' ) );
}
}
ここでの問題は、custom-script.jsが/ incフォルダの中で利用できず、theme-folderのどこにもないことです。しかし、カラーピッカーは完璧に機能します。そしてこの行を削除すると:
wp_enqueue_script( 'custom-script-handle', plugins_url( 'custom-script.js', __FILE__ ), array( 'wp-color-picker' ), false, true );
それは一緒に働くのをやめるでしょう。それでは、どうしてこのエラーが出るのでしょうか。
クリーンなコンソールログが欲しいのですが。
編集:
私は代わりにこれに変更しました:
wp_enqueue_script( 'wp-color-picker' );
私はこのエラーが出ます:
Uncaught TypeError: $(...).wpColorPicker is not a function
at HTMLDocument.<anonymous> (admin-color-picker.js?ver=4.9.4:3)
at i (load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,thickbox&ver=4.9.4:2)
at Object.fireWith [as resolveWith] (load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,thickbox&ver=4.9.4:2)
at Function.ready (load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,thickbox&ver=4.9.4:2)
at HTMLDocument.K (load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,thickbox&ver=4.9.4:2)
カラーピッカーはcustom-script-handle
の依存関係としてエンキューされている別のスクリプトなので、うまく機能しています。 URLが間違っているためにcustom-script-handle
が読み込まれない場合でも、カラーピッカースクリプトは読み込まれます。
custom-script-handle
をエンキューしないと、スクリプトがまったくエンキューされているため、カラーピッカーは機能しません。あなたはそれをwp_enqueue_script( 'wp-color-picker' );
で別々にエンキューする必要があるでしょう
custom-script-handle
自体が読み込まれず、コンソールエラーが発生するのは、URLが間違っているためです。 URLが間違っているのは、plugins_url()
の使い方が間違っているためです。具体的には__FILE__
の使い方にあります。
ドキュメント から、plugins_url()
の2番目の引数は次のとおりです。
プラグインまたはmu-plugin内のファイルへのフルパス。 URLはそのディレクトリからの相対パスになります。通常これは
__FILE__
を引数として渡すことによって行われます。
問題はあなたの場合__FILE__
がテーマの中にあるということです。だからあなたの__FILE__
は:
/home/account/public_html/wp-content/themes/mytheme-theme/inc/{whatever-the-file-name-is}.php
しかし、pluginsディレクトリは次のとおりです。
/home/account/public_html/wp-content/plugins
WordPressは既にpluginsフォルダへのURL https://example/test/wp-content/plugins/
を知っていますが、あなたが要求した特定のファイルへのURLを見つけるためにこれら二つのパスを使う必要があります。それでplugins_url()
がすることは最初のパスからその2番目のパスを差し引くことによってプラグインフォルダーを見つけ出すことです。
したがって、正しくを使用すると、__FILE__
は次のようになります。
/home/account/public_html/wp-content/plugins/my-plugin/inc/assets.php
その後、プラグインのパスがこれから引かれ、あなたは得る:
my-plugin/inc/assets.php
plugins_url()
はファイル名を削除します。
my-plugin/inc
次に、最初の引数に指定したファイル名を追加します(custom-script.js
)。
/my-plugin/inc/custom-script.js
そして最後にそれをプラグインURLに追加します。
http://example.com/wp-content/plugins/my-plugin/inc/custom-script.js
しかし、あなたの__FILE__
はpluginsフォルダに入っていないので、重複はありません。それで、それがプラグインディレクトリとファイル名を引くとき、相対的なパスはまだ:
/home/account/public_html/wp-content/themes/mytheme-theme/inc/
そしてそれとそのファイル名がプラグインのURLに追加され、あなたはこれで終わります:
https://example.com/wp-content/plugins/home/account/public_html/wp-content/themes/mytheme-theme/inc/custom-script.js
custom-script.js
をエンキューするためにテーマが必要な場合は、それをテーマに入れるか、プラグインがすでに登録しているハンドルを使用してエンキューする必要があります。テーマ内から直接プラグインからファイルをロードしないでください。