Jika sebuah plugin menggunakan beberapa skrip (contoh utama: jQuery UI Datepicker), tetapi Anda tidak puas dengan cara skrip menghasilkan output, maka ada dua kemungkinan:
1. Batalkan registrasi skrip> Tambahkan versi Anda sendiri
Jadi pertama Anda akan perlu memeriksa pegangan, kemudian menemukan prioritas dan hook ( wp_enqueue_scripts
, login_enqueue_scripts
, dll) ... Anda tahu bor.
2. Ubah parameter plugin jQuery
Biasanya - jika plugin tersebut bukan omong kosong - itu mendorong melalui parameter dari PHP ke JS menggunakan
wp_localize_script( $handle, $object_name, array(
// data
) );
Sekarang ini adalah cara cerdas untuk menambahkan data Anda ke skrip JS, tapi ... itu tidak dapat difilter secara default. Baik WP_Scripts
atau WP_Dependencies
penawaran setiap pengguna filter yang nantinya bisa memanfaatkan
Pertanyaan: Bagaimana kita bisa memfilter argumen / parameter yang dipindahkan dari PHP ke Javascript menggunakan
wp_localize_script
?
wp_localize_script()
: array tunggal atau multi-dimensi .@toscho implementasi yang bagus. Teruji dan benar. Ini adalah versi yang sedikit dimodifikasi, yang juga meneruskan $ handle dan $ object_name sehingga Anda dapat memfilter hanya saat diperlukan.
sumber
Jawaban yang diterima sangat bagus! Tapi saya mengalami masalah yang bidang kustom lanjutan berhenti bekerja di backend karena kesalahan javascript. Setelah menggali selama beberapa jam, saya sampai pada kesimpulan bahwa objek Filterable_Scripts hilang file javascript yang terdaftar oleh plugin ACF. Saya tidak tahu persis mengapa itu melakukan ini, tetapi saya telah menemukan solusi yang tepat untuk ini jika Anda mengalami masalah yang sama.
The
$GLOBALS['wp_scripts']
untungnya masih berisi script yang tepat. Jadi saya melakukan hal berikut diadd_action
:Karena objek berisi array dari semua skrip terdaftar dan pegangan juga merupakan kunci array, saya bisa menggunakan array_diff_key untuk menentukan skrip mana yang hilang dari objek yang diperluas dan menambahkannya kembali. Saya melakukan ini dan bukan hanya
$fscripts->registered = $GLOBALS['wp_scripts']->registered;
karena saya tidak ingin menimpa perubahan yang dibuat oleh objek yang diperluas
sumber
$acf_field_group = $GLOBALS['wp_scripts']->registered['acf-field-group'];
(jugaacf-input
) dan kemudian menambahkannya lagi ke contohWP_Scripts
tag yang diperluas :,$GLOBALS['wp_scripts']->registered['acf-field-group'] = $acf_field_group
kemudian menyadari bahwa ACF hanya menggunakan skrip dalam Admin dan saya hanyal10n
di depan jadi hanya membungkus aksi dan saring dalam!is_admin
tes.