WordPress: переменная PHP, показывающая null в JavaScript

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

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

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

Попробуйте обернуть свой javascript в $(document).ready(function () { // your script here })

Tom M 12.03.2019 18:27

@tom-m Я пытался, но не получилось.

Roshan Kumar 12.03.2019 18:30

@Teemu - это не дубликат этого вопроса. WordPress позволяет легко передавать переменные PHP в JavaScript с помощью функции wp_localize_script(). Его переменные просто используются вне области видимости.

Xhynk 12.03.2019 18:33

@Xhynk Да, я понял это почти сразу после закрытия, сейчас снова открылся.

Teemu 12.03.2019 18:34
$conv не определен в вашей функции.
Sysix 12.03.2019 18:36

@Teemu Итак, как я могу использовать значение $ conv.

Roshan Kumar 12.03.2019 18:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
6
363
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваша проблема в том, что вы определили $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);

}
Ответ принят как подходящий

Вы используете свою переменную $conv вне области видимости. Взгляните на документацию Область видимости переменной PHP. Вы определяете $conv в глобальной области, но ссылаетесь на локальную область $conv в своей cassets() функции.

Вам нужно использовать функцию с областью действия $conv, либо определив ее внутри, либо передав ее функции как глобальную переменную, либо передав ее как Ссылка.

Вот несколько примеров:

Определение в рамках:

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

Другие вопросы по теме