Saya sudah mendapatkan potongan javascript yang berisi objek literal. Tapi saya perlu melokalkannya, dan saya ingin mencari cara untuk menulis ulang sehingga saya bisa mendapatkan wp_localize_script () untuk mengaksesnya, dan menghasilkan format yang benar.
Versi non-lokal (non dinamis) terlihat seperti ini:
var layoyt_config = {
'header' : 1
, 'footer' : 1
, 'ls' : {'sb1':1}
, 'rs' : {'sb1':1,'sb2':1}
, 'align' : 'center'
};
Sekarang, agar nilai-nilai itu dihasilkan oleh php (berdasarkan beberapa wp_settings) Saya ingin menggunakan wp_localize_script, jadi saya bisa mengambilnya dari sana:
var layoyt_config = my_localized_data.layoyt_config;
Dan untuk mendapatkan data itu ke properti objek itu, saya 'berpikir' saya bisa melakukan ini, tetapi jelas tidak:
$data = array(
'layout_config' => {
'header' : 1
, 'footer' : 1
, 'ls' : {'sb1': 1}
, 'rs' : {'sb1': 1,'sb2': 1}
, 'align' : 'center'
}
);
wp_localize_script('my-script-handle', 'my_localized_data', $data);
Karena ini akan menyebabkan kesalahan parse PHP, saya telah mencoba menulis ulang sintaks json to array, karena wp_localize_script akan mengubahnya kembali menjadi notasi objek, tetapi ini juga tidak berfungsi untuk saya:
$data = array(
'layout_config' => array(
'header' => 1
, 'footer' => 1
, 'ls' => array('sb1'=>1)
, 'rs' => array('sb1'=>1,'sb2'=>1)
, 'align' => 'center'
)
);
wp_localize_script('my-script-handle', 'my_localized_data', $data);
Dan sementara ini berjalan lancar meskipun parser php, saya tidak mendapatkan output yang diharapkan dalam sumber halaman saya, karena my_localized_data.layout_config menjadi String "Array", di sini adalah output:
<script type='text/javascript'>
/* <![CDATA[ */
var wpkit_localized_data = {
layout_config: "Array"
};
/* ]]> */
</script>
Jadi .. Bagaimana saya bisa melakukan ini (atau saya hanya harus menerima bahwa saya harus 'meratakan' objek saya menjadi var diskrit seperti:
lc_header = '1';
ls_ls_sb1 = '1';
etc...
sumber
Penafian - Saya berada di luar jangkauan saya pada hal-hal keamanan JS di sini.
Pertama, untuk mencocokkan output yang Anda inginkan, Anda tidak aktif dengan level bersarang. Nama objek digunakan sebagai parameter dalam panggilan lokal (bukan kunci array):
Tapi
ls
danrs
masih rusak karenaWP_Scripts->print_scripts_l10n()
metode tidak menangani kasus ketika variabel adalah array.Terbaik yang bisa saya lakukan untuk memperbaiki filter berikut ini (seperti di atas - tidak yakin seberapa aman menggunakannya dalam produksi, tetapi untuk memberikan gambaran umum):
sumber