web-dev-qa-db-ja.com

Wp_enqueue_script()とwp_enqueue_script()の組み合わせでwp_register_script()を使用するのはいつですか。

あなたがwp_register_script()を使う必要があるとき、私は理解するのに苦労しています。現在のところ、私は以下のようにしています。

add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
function enqueue() {
    $handle = 'some-handle';
    $js = 'http://example.com/my.js';
    wp_register_script( $handle, $js );
    wp_enqueue_script( $handle );
}

私はたくさんの読書をしました(コーデックス、ブログなど)が、いつ私が最初に登録するべきであるか、または私がちょうどエンキューするべきであるか理解できません。例として、私は気付いた TwentyTwelve はスタイルやスクリプトを登録していない、それはそれらをエンキューするだけです。

51
akTed

wp_register_script()コーデックスページ 文字通り:

後でwp_enqueue_script()で使用するためにWordPressにJavaScriptを登録する安全な方法。

つまり、スクリプトを登録したいがページに直接ロードしたくない場合は、一度ファイルを登録しておき、必要なときにロードすることができます。

例えば:

いくつかの機能をロードするswitchステートメントがありますが、3つのケースのうち2つは特定のJavaScriptファイルを必要とし、1つは必要としません。スクリプトを毎回キューに入れるか、リソースを追加するか、必要なときに単にスクリプトをキューに入れることができます。

...
wp_register_script( 'my-handy-javascript', ... );
...
switch( $somevar ) {
    case 'value':
        wp_enqueue_script( 'my-handy-javascript' ); // needs the file
        ...
    break;
    case 'value2':
        wp_enqueue_script( 'my-handy-javascript' ); // needs the file
        ...
    break;
    default:
    case 'value3': // doesn't needs the file
        ...
    break;
}

スクリプトを登録してからエンキューする必要はありませんが、必要なすべてのスクリプトをコード内のすべての場所ではなくfunctions.php内のどこかに登録すると、コード内にロジックを提供できます。

コーデックスはまた、次のように伝えます。

この関数を呼び出すにはwp_enqueue_scriptsアクションを使用し、管理者側で呼び出すにはadmin_enqueue_scriptsを使用してください。

つまり、フロントエンドのにバックエンドでスクリプトをエンキューしたい場合は、一度スクリプトを登録してから、フロントエンドのwp_enqueue_scriptとバックにロードすることができます。 admin_enqueue_scriptで終了します。
この方法では、1つのテーマ、プラグイン、ウィジェット、その他何でも同じエンキューリソースを2回使用することはできません。

46
Mike Madern

wp_register_scriptの前にwp_enqueue_scriptsを使用することの主な利点は、 Codex から次の段落で説明されています。

Wp_register_script()を使用して事前登録されているスクリプトが、キューに入れられている別のスクリプトの依存関係としてリストされている場合は、wp_enqueue_script()を使用して手動でキューに入れる必要はありません。 WordPressは、登録されたスクリプトのハンドルを依存関係として一覧表示するキューに登録されたスクリプトを含める前に、登録されたスクリプトを自動的に含めます。

あなたがこれを必要としないと信じるならば(例えば、あなたのスクリプトが依存関係に関与しないことを100%確信しているので)、おそらくwp_enqueue_scriptsを直接使うことができます、予備のwp_register_script

6
Franco

私はいくつかの記事を読み終え、次の結論に至りました。私はそれが役に立つと思います。

  1. Wp_register_script()を使用してスクリプトを登録するだけで登録されます。ロードしていません。登録されたスクリプトは、wp_enqueue_script()を使用してエンキューされるまでロードされません。
  2. 各スクリプトを同時に登録してエンキューする必要はありません。エンキューするだけです。 wp_enqueue_script()関数が自動的にスクリプトを登録するので、登録は必須ではありません。
  3. ただし、次のいずれかの状況にある間に登録する必要があります。

a。フロントエンドに1回、バックエンドに1回(adminページ)のように複数の場所にロードするスクリプトが必要だとします。これで、スクリプトを一度だけ登録できます。その後、フロントエンドとバックエンドで個別にエンキューします。見て、エンキューとはロードを意味します。登録することはロードすることを意味しません。登録しない場合は、キューに入れた回数だけ自動的に登録されます。一方、一度登録すると、何回エンキューしても1回登録されます。

b。スクリプトを他のスクリプトの依存関係として使用したい場合は、wp_enqueue_script()を使用してそれをエンキューする必要はありません。 wp_register_script()で登録するだけです。 wp_enqueue_script()でキューに入れられた他のスクリプトの依存関係としてこのハンドル名を使うと、自動的にキューに入れられます。

c。スクリプトを一度にロードするのではなく、必要に応じてロードするようにしたい場合は、後で使用するためにスクリプトを登録するだけです。ユースケースは上に示されています。

N.B.私が確信している限り、CSSスタイルシートについても同じ結論を導き出すことができます。私たちはwp_register_style()とwp_enqueue_style()を同じ方法で使用できると言うつもりです。

ここに描かれた結論は私自身の推論を反映することに注意してください。間違っている場合は修正してください。そして、あなたは異なったそしてもっと良い結論に達したかもしれません。もしそうなら、私たちに知らせてください。知るか?おそらくあなたのものは最高です。言われているように、「多くの教義と同じくらい多くの救いの方法があります。」:)

https://sxbook.blogspot.com/2018/12/wpregisterscript-when-to-use.html