wp_localize_script
に問題があります。booleanとintを変数として取得できません
wp_enqueue_script( 'helloworld' , 'helloworld.js', false, '1.0.0', true);
$site_config = array();
$site_config['boo'] = (bool)true;
$site_config['number'] = (int)1;
wp_localize_script( 'helloworld' , 'site_config' , $site_config );
なぜ私が手に入れたのか:
var site_config = {"boo":"1","number":"1"};
どうして:
var site_config = {"boo":true,"number":1};
修正しませんか? https://core.trac.wordpress.org/ticket/25280 、何か間違ったことや足りないことがありますか?
私はこんなに長い間やっています:
wp_add_inline_script('helloworld','var site_config ='.json_encode($site_config));
なぜの部分はWP_Scripts::localize()
メソッドの中にあります:
foreach ( (array) $l10n as $key => $value ) {
if ( !is_scalar($value) )
continue;
$l10n[$key] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8');
}
(string)
キャストに注意してください。
最新のパッチ は、is_scalar()
をis_string()
に置き換え、(string)
キャストを削除することを提案しています。それはうまくいくでしょう。カスタムラッパーで。しかし、コアwp_scripts()->localize()
メソッドは将来変更される可能性があるので、これがここに行く方法ではないと思います。
私はまた、メソッドを通じてデータを修正するのはハックすぎると思います。
wp_scripts()->get_data( $handle, 'data' )
そして
wp_scripts()->add_data( $handle, 'data', $data )
正しく行えば、wp_scripts()->localize()
;-)のための重複したラッパーを書くことになるかもしれません。
より柔軟な回避策は、 コア関数 を使用することです。
wp_add_inline_script( $handle, $data, $position )`
動的非文字列値を追加します。
ブール値がtrueの場合は常に1が返され、ブール値がfalseの場合はが返されます。 returnemptyなので、trueの場合は1になります。
以下のコードは私のローカルプロジェクトでテストされています。正確にコピー&ペースト
//Add it in **functions.php**
function load_localize_scripts() {
wp_enqueue_script('localize_script', get_template_directory_uri() . '/js/localize_script.js', array(), '1.0.0', true );
wp_localize_script('localize_script', 'localize_scripts_vars', array(
'boolean' => true, // it will return 1
'integer' => 10 // it will always return integre
)
);
}
add_action('wp_enqueue_scripts', 'load_localize_scripts');
//Add this in **localize_script.js**
jQuery(document).ready(function() {
var site_config;
if (localize_scripts_vars.boolean == '1') {
site_config = {"boolean":'true',"number":localize_scripts_vars.integer};
console.log(site_config);
} else if (localize_scripts_vars.boolean == '' || localize_scripts_vars.boolean == NULL) {
site_config = {"boolean":'false',"number":localize_scripts_vars.integer};
console.log(site_config);
};
});