web-dev-qa-db-ja.com

plugins_url関数はシステムパスとURLを混ぜる

私のWordPressウィジェットでは、次のコードを使用しています。

wp_register_script('jquery-ui.widget', plugins_url('assets/js/jquery-ui-1.9.2.widget.js', dirname( __FILE__ )));

残念ながら、このコードは私のシステムパスと混ざっている無効なURLを教えてくれます。

http://test.dev/wp-content/plugins/C:/projects/wordpress/plugins/assets/js/jquery-ui-1.9.2.widget.js?ver=3.6

この問題は、ローカルのWordPressインストールが(Apache 2の)Windowsコンピュータで実行されているという事実に関連しているのでしょうか。

1

短い答え

  1. jquery-ui.widgetは、WPに既に含まれ登録されている標準スクリプトの1つです。登録する必要はありません。エンキューするだけです。
  2. あなたのコードで間違っているのはplugin_urlの中のdirname関数です。 __FILE__の2番目の引数としてplugins_urlのみを残します

長い回答:もっと詳しく

jquery-ui.widget標準のワードプレススクリプト の1つです。そのため、ほとんどの場合、自分でアップロードしたファイルを使用する必要はありません。しかし、WPのインストールでコピーを使用するだけです。

この場合、スクリプトを登録する必要はありません。スクリプトはすでに登録されているため、wp_enqueue_script('jquery-ui-widget')を使用してエンキューするだけで済みます。

これにより、Wordpressに付属のスクリプトのバージョンが正しくエンキューされます。現在のバージョンのWP(3.6)では、 'jqueri-ui widget'はバージョン '1.10.3'です。

このバージョンに問題がありますか?他のプラグインやテーマに同じスクリプトのWPバージョンが含まれている場合はどうなるか想像してみてください。

WP標準スクリプトのいずれかをインクルードすることを忘れている場合、コードの問題はplugins_url関数にあります。

コーデックスplugins_urlの2番目の引数のドキュメントは、私が今まで見た中で最も明確なものではありません。

$plugin - どの親ディレクトリのプラグインディレクトリの下のパスを$ pathにするかを指定します。

ディレクトリパス(あなたがするのと同じように)またはフルパス(ファイル名を含む)を渡す必要があるかどうかは十分に明確ではありません。

しかし、同じコーデックスページで以下の数行を読みます。plugins_url()関数はプラグインファイルで一般的に使用されています。 __FILE__パラメータの代わりに$plugin PHPマジック定数を渡すと、$pathはそのファイルの親ディレクトリからの相対パスになります

だから、今我々は我々がそのように機能を使用する必要があることを理解しています:

wp_register_script('jquery-ui.widget', plugins_url('assets/js/jquery-ui-1.9.2.widget.js', __FILE__ )); // without dirname( )

ただし、このコードを機能させるには、プラグインのルートディレクトリにあるファイルに含める必要があるため、最善の解決策はメインプラグインファイルに置くことです。理由は簡単です。__FILE__ PHP magic constantには、このファイルが必須であるか別のファイルに含まれている場合でも、常にと書かれたファイルのフルパスが入ります。ですから、このコードを内側のプラグインディレクトリに置かれたファイルに入れても、その範囲ではうまくいきません。

'assets/js/jquery-ui-1.9.2.widget.js'はメインのプラグインファイルからの相対パスでなければならないので、 'assets'はプラグインルートの最初のレベルのサブフォルダでなければなりません。

それがあなたを助けてくれることを願っています。

3
gmazzap