WordPress:PHP 变量在 JavaScript 中显示为 null

Ros*_*mar 3 javascript php wordpress jquery

我被困在奇怪的情况我试图通过 WordPress wp_localize_script 在 JS 中传递 PHP 变量并尝试在 console.log 中显示它,但它输出空值。这是我在functions.php中的代码

$conv = 1.36;
echo $conv;

add_action('wp_enqueue_scripts','cassets');
function cassets(){
  wp_enqueue_script("all-script",get_template_directory_uri().'/all-script.js',array('jquery'),'',true);
  $rate= array(
    'conv' => $conv,
  );
  wp_localize_script( 'all-script', 'rate', $rate);

}
Run Code Online (Sandbox Code Playgroud)

并在 all-script.js 中

var conv = rate.conv;
console.log(conv);
Run Code Online (Sandbox Code Playgroud)

在控制台窗口中它显示为 null 但 php echo 值显示正确。

提前致谢。

Xhy*_*ynk 5

您正在使用$conv超出范围的变量。查看PHP 的变量范围文档。您$conv在全局范围内定义,但$conv在您的cassets()函数中引用本地范围。

您需要使用函数 scoped $conv,可以通过在内部定义它,或者将其作为全局变量传递给函数或将其作为Reference传递。

下面是几个例子:

范围内定义:

add_action('wp_enqueue_scripts','cassets');
function cassets(){
    $conv = 1.36;

    wp_enqueue_script( 'all-script', get_template_directory_uri().'/all-script.js', array('jquery'), '', true );

    $rate = array(
        'conv' => $conv,
    );

    wp_localize_script( 'all-script', 'rate', $rate );
}
Run Code Online (Sandbox Code Playgroud)

将其作为全局变量传递给函数:

$conv = 1.36;

add_action('wp_enqueue_scripts', 'cassets' );
function cassets(){
    global $conv;

    wp_enqueue_script( 'all-script', get_template_directory_uri().'/all-script.js', array('jquery'), '', true );

    $rate = array(
        'conv' => $conv,
    );

    wp_localize_script( 'all-script', 'rate', $rate );
}
Run Code Online (Sandbox Code Playgroud)

通过闭包传递它:

$conv = 1.36;

add_action('wp_enqueue_scripts', function() use($conv){
    wp_enqueue_script( 'all-script', get_template_directory_uri().'/all-script.js', array('jquery'), '', true );

    $rate = array(
        'conv' => $conv,
    );

    wp_localize_script( 'all-script', 'rate', $rate );
});
Run Code Online (Sandbox Code Playgroud)