web-dev-qa-db-ja.com

wp_register_scriptのしくみについての質問

さて、私はWordPress用のルーツテーマ(https://github.com/retlehs/roots)を使っています。これは一種のスターターテーマまたはテーマフレームワークです。

私はそれがjQueryのWordPressによってロードされたバージョンを登録解除する方法について混乱しています、しかしそれはスクリプトの正確な位置を指定せずにそれを再び登録します。

だから、テーマのheader.phpにこのコードがあります:

...
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
  <script>window.jQuery || document.write('<script src="<?php echo get_template_directory_uri(); ?>/js/libs/jquery-1.6.4.min.js"><\/script>')</script>
...

「GoogleがホストするjQueryスクリプトをダウンロードしますが、何らかの理由でjQueryオブジェクトが存在しない場合は、テーマに付属するスクリプトを読み込むscript要素を作成するだけです。

ただし、themeのfunctions.phpに含まれているroots-cleanup.phpというテーマファイルの中には、WordPressに付属のjQueryスクリプトの登録を解除するが、実際にはスクリプトのURLを指定せずにjQueryを再度登録するコードがあります。

...
function roots_head_cleanup() {
  ...

  // don't load jQuery through WordPress since it's linked in header.php
  if (!is_admin()) {
    wp_deregister_script('l10n');
    wp_deregister_script('jquery');
    wp_register_script('jquery', '', '', '', true);
  }
}

add_action('init', 'roots_head_cleanup');
...

「このパラメータ[locationパラメータ]はWordPressがこのスクリプトについてまだ知っていない場合にのみ必要です。」

それで、私は疑問に思っています、jQueryをロードするスクリプトタグをheader.phpに含めることによって、それはWordPressがwp_register_scriptの呼び出しに関する限りそれらを認識していることを意味しますか?そのようです:

wp_register_script('jquery', '', '', '', true);

私はこのテクニックを試してみたかったのですが、期待した結果が得られませんでした。つまり、wp_enqueueを使用して含めたJavaScriptとjQueryに依存したJavaScriptは、ヘッダーからそれらを含むスクリプトタグを削除してもまだ読み込まれます。つまり、読み込まれたjQueryがないために読み込まれたJavaScriptは失敗しました。これはまた、locationパラメータを指定しないと、WordPressが必ずしもjQueryスクリプトを認識しないことを示しています。

1
racl101

レコードにとってこれは完全に間違ったことです。

テーマはWordPressに登録されたjQueryスクリプトを登録解除することを避けるべきです(決して読んではいけません)(プラグインは絶対にこれをしてはいけません)。

テーマがjqueryスクリプトを登録解除すること(それを置き換えること)である場合は、正しく再登録する必要があります。

 wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js');

ここに問題があります。上記は コーデックス からの抜粋です。上記のjQueryバージョンは現在時代遅れであり、潜在的にプラグインを壊す可能性があります。テーマとプラグインがjQueryバージョンの置き換えを避けるべきなのはこのためです。

上記のテーマは、悪い習慣の素晴らしいデモンストレーションです。 jQueryが正しく再登録されないだけでなく、必要に応じてヘッダーに直接印刷されます。

に答えて:

それで、私は疑問に思っています、jQueryをロードするスクリプトタグをheader.phpに含めることによって、それはWordPressがwp_register_scriptの呼び出しに関する限りそれらを認識していることを意味しますか?

いいえ.

私はこのテクニックを試してみたかったのですが、期待した結果が得られませんでした。つまり、wp_enqueueを使用して含めたJavaScriptとjQueryに依存したJavaScriptは、ヘッダーからそれらを含むスクリプトタグを削除しても読み込まれたままになります。

うん、WordPressjQueryをロードしようとしていた(しかし実際にはファイルへのパスとして ''が渡された - これはおそらくエラーを引き起こしているはずだった。)したがって、jQueryが実際にロードされていなくても、スクリプトはまだロードされています。

wp_register_script(および関連する関数)は、依存関係を処理しながら、競合のない方法でjavascriptをロードするために存在します。このテーマがやろうとしているので、それを使用しないで、ものを壊します。

8
Stephen Harris