WordPress: PHP-переменная, показывающая нуль в JavaScript - PullRequest
3 голосов
/ 12 марта 2019

Я застрял в странной ситуации. Я пытаюсь передать переменную PHP в JS с помощью WordPress wp_localize_script и попытаться показать ее в 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);

}

и в all-script.js

var conv = rate.conv;
console.log(conv);

В окне консоли это показывает нуль, но значение эха php показывает право.

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 12 марта 2019

Вы используете переменную $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 );
}

Передача этой функции в качестве глобальной переменной:

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

Передача через замыкание :

$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 );
});
1 голос
/ 12 марта 2019

Ваша проблема в том, что вы определили $conv вне вашей функции.

Внутри вашей функции $conv был неопределен.(Я думаю, вы тоже должны получить предупреждение от php).

Попробуйте:

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...