Очередность вызова хуков
Получаю строку в JS из PHP.
Строка идет как аргумент из do_action().
Суть: почему функция my_fullcalendar() вызывается два раза, причем второй раз строка имеет нулевую длину (в HTML падает вот это:
const php_vars = ""
). А при первом вызове, когда аргумент есть, wp_add_inline_script() не отрабатывает!.
То есть, add_action() отрабатывает и без do_action() и, соответственно, без аргумента.
add_action('rcl_enqueue_scripts','my_fullcalendar',10,1);
function my_fullcalendar($var){
rcl_enqueue_script('calend_scripts', rcl_addon_url( 'js/fullCalendar.js', __FILE__ ),false,true);
wp_add_inline_script('calend_scripts', 'const php_vars = ' . '"' . $var . '"', 'before' );
}
do_action('rcl_enqueue_scripts', $arg);
wp_head();
выносил add_action() и my_fullcalendar() в functions.php, тоже самое.
Скорее всего, проблема возникает из-за того, как работает wp_head() и функция do_action().
Двойной вызов функции: Вероятно, do_action('rcl_enqueue_scripts') вызывается дважды: один раз внутри темы или плагина и второй раз вручную. Это приводит к двойному вызову my_fullcalendar(), при этом во второй раз аргумент $var пустой.
Решение
Попробуйте добавить проверку в my_fullcalendar() и использовать приоритеты wp_head и rcl_enqueue_scripts:
add_action('rcl_enqueue_scripts','my_fullcalendar', 10, 1); function my_fullcalendar($var){ // Проверяем, чтобы аргумент не был пустым if (empty($var)) return; // Подключаем скрипт rcl_enqueue_script('calend_scripts', rcl_addon_url( 'js/fullCalendar.js', __FILE__ ), false, true); // Добавляем инлайн-скрипт только если 'calend_scripts' уже зарегистрирован if (wp_script_is('calend_scripts', 'registered')) { wp_add_inline_script('calend_scripts', 'const php_vars = "' . esc_js($var) . '"', 'before' ); } } // Вызываем хук с аргументом do_action('rcl_enqueue_scripts', $arg);Также убедитесь, что do_action('rcl_enqueue_scripts') вызывается только один раз и в нужный момент (например, не дублируется в другом месте кода).