Kapan saya harus menggunakan wp_register_script () dengan wp_enqueue_script () vs hanya wp_enqueue_script ()?

55

Saya mengalami kesulitan memahami kapan Anda perlu menggunakannya wp_register_script(). Saat ini, saya hanya menggunakan sesuatu seperti:

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 );
}

Saya sudah banyak membaca (Codex, blog, dll.), Tetapi tidak bisa mengerti kapan saya harus mendaftar terlebih dahulu, atau kapan saya harus keluar saja. Sebagai contoh, saya perhatikan TwentyTwelve tidak mendaftarkan gaya atau skrip apa pun, itu hanya membuat mereka enqueues.

akTed
sumber

Jawaban:

50

The wp_register_script()halaman Codex harfiah mengatakan:

Cara aman mendaftarkan javascripts di WordPress untuk digunakan nanti wp_enqueue_script().

Ini berarti, jika Anda ingin mendaftarkan skrip Anda, tetapi tidak secara langsung memuatnya di halaman Anda, Anda dapat mendaftarkan file satu kali, dan kemudian memuatnya saat Anda membutuhkannya.

Sebagai contoh:

Anda memiliki pernyataan sakelar yang memuat beberapa fungsionalitas, tetapi dua dari tiga kasus memerlukan file javascript tertentu, dan satu tidak. Anda dapat membuat skrip setiap kali, yang membutuhkan lebih banyak sumber daya, atau hanya skrip saat Anda membutuhkannya:

...
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;
}

Anda tidak perlu mendaftarkan skrip dan kemudian mengirimkannya, tetapi skrip dapat memberikan beberapa logika dalam kode Anda jika Anda mendaftarkan semua skrip yang Anda butuhkan di tempat Anda, functions.phpbukan di mana-mana dalam kode Anda.

Codex juga memberi tahu yang berikut:

Gunakan wp_enqueue_scriptstindakan untuk memanggil fungsi ini, atau admin_enqueue_scriptsmenyebutnya di sisi admin.

Ini berarti bahwa jika Anda ingin membuat skrip Anda di ujung-ujung dan di ujung-belakang, Anda dapat mendaftarkan skrip sekali, dan kemudian memuatnya di ujung-depan dengan wp_enqueue_scriptdan di ujung-belakang dengan admin_enqueue_script.
Dengan cara ini Anda tidak akan memiliki jalan enqueue yang sama dua kali dalam satu tema, plugin, widget atau apa pun.

Mike Madern
sumber
Terima kasih. Itu sangat membersihkannya. Jadi, apakah Anda berpikir bahwa TwentyTwelve tidak repot-repot mendaftar terlebih dahulu karena pasti akan memuatnya?
akTed
Itu pasti bisa jadi kemungkinan. Saya tidak tahu bagaimana tema Twenty Twelve dibangun karena saya tidak pernah menggunakannya, tetapi mereka pasti memiliki alasan untuk enqueuemenggantikannya register.
Mike Madern
2
Dalam hal itu, saya tidak setuju dengan "Anda dapat membuat skrip setiap kali, yang membutuhkan lebih banyak sumber daya, atau hanya membuat skrip saat Anda membutuhkannya". Dalam kode contoh Anda, Anda dapat menghapus panggilan register dan sebagai gantinya memiliki beberapa panggilan setara (dengan $ src arg) yang setarawp_enqueue_style() . Ini hanya akan menjadi upaya pengetikan, tetapi tidak menghasilkan kebutuhan sumber daya yang lebih besar. Benar?
Jan-Philip Gehrcke
7
Satu poin yang telah ditinggalkan oleh semua penjelasan sejauh ini adalah, yang dapat Anda gunakan wp_register_script()untuk hanya mendaftar skrip sehingga dapat digunakan sebagai ketergantungan untuk skrip lain dan hanya dimuat dengan mereka, tanpa pernah enqueued secara langsung.
JHoffmann
1
Meskipun ini menjelaskannya dengan baik, saya akan merekomendasikan untuk membaca jawaban ini juga.
lowtechsun
8

IMHO keuntungan utama menggunakan wp_register_scriptsebelum wp_enqueue_scriptsdiilustrasikan dalam paragraf berikut dari Codex :

Skrip yang telah didaftarkan sebelumnya menggunakan wp_register_script () tidak perlu secara manual enqueued menggunakan wp_enqueue_script () jika mereka terdaftar sebagai dependensi dari skrip lain yang enqueued. WordPress akan secara otomatis menyertakan skrip terdaftar sebelum menyertakan skrip enqueued yang mencantumkan pegangan skrip terdaftar sebagai ketergantungan.

Jika Anda yakin tidak memerlukan ini (mis. Karena Anda 100% yakin bahwa skrip Anda tidak akan terlibat dalam ketergantungan apa pun), Anda mungkin dapat langsung menggunakannya wp_enqueue_scripts, tanpa persiapan wp_register_script.

Franco
sumber
2

Saya telah membaca beberapa artikel dan sampai pada kesimpulan berikut. Saya pikir itu membantu.

  1. Mendaftarkan skrip apa pun menggunakan wp_register_script()hanya mendaftar; tidak memuatnya. Script yang terdaftar tidak akan dimuat sebelum enqueued menggunakan wp_enqueue_script().
  2. Kami tidak perlu mendaftar dan mengirimkan setiap skrip secara bersamaan. Kita seharusnya enqueue. Mendaftar tidak wajib karena wp_enqueue_script()fungsi secara otomatis mendaftarkan skrip.
  3. Tetapi kita perlu mendaftar ketika kita berada dalam situasi berikut:

    Sebuah. Misalkan kita memerlukan skrip untuk memuat ke lebih dari satu tempat seperti sekali di front-end dan sekali di back-end (halaman admin). Sekarang kita bisa mendaftarkan skrip sekali saja. Dan kemudian enqueue di front-end dan back-end secara individual. Lihat, enqueueing berarti memuat. Mendaftar bukan berarti memuat. Jika kami tidak mendaftarkannya, maka akan secara otomatis terdaftar sebanyak yang kami minta. Di sisi lain, jika kita mendaftar sekali, itu akan didaftarkan sekali, tidak peduli berapa kali kita melakukannya.

    b. Jika kita ingin menggunakan skrip sebagai dependensi skrip lain, maka kita tidak perlu menggunakannya wp_enqueue_script(). Daftarkan saja wp_register_script(). Dan itu akan secara otomatis enqueued ketika kita menggunakan itu menangani nama sebagai ketergantungan dari skrip lain enqueued dengan wp_enqueue_script().

    c. Jika kita ingin skrip dimuat ketika dibutuhkan daripada dimuat sekaligus, kita bisa mendaftarkannya untuk digunakan nanti. Kasing penggunaan telah ditunjukkan di atas.

NB Sejauh yang saya yakini, kesimpulan yang sama dapat ditarik untuk stylesheet CSS. Maksud saya mengatakan bahwa kita dapat menggunakan wp_register_style()dan wp_enqueue_style()dengan cara yang sama.

Perhatikan bahwa kesimpulan yang diambil di sini mencerminkan deduksi saya sendiri. Jika saya salah, mohon koreksi saya. Dan Anda mungkin telah mencapai kesimpulan yang berbeda dan jauh lebih baik. Jika demikian, maka silakan beri tahu kami. Siapa tahu? Mungkin milikmu adalah yang terbaik. Seperti kata pepatah, “Sebanyak ajaran, banyak cara untuk keselamatan.” :)

https://ansrthemeaction.blogspot.com/2019/11/wpregisterscript-when-to-use.html

Mohammad Shohel Rana
sumber
Penjelasan Anda adalah yang terbaik yang pernah saya baca. Sekarang saya mengerti mengapa mendaftar skrip itu penting. Terima kasih!
Astaga
Terima kasih banyak @ Lee
Mohammad Shohel Rana