Постоянная PHP внутри JS-файла

Я столкнулся с проблемой, которую я не могу понять.

Во время разработки плагина я включаю файл file.js.php (register / enqueue).

<? /* File.js.php */ Header("content-type: application/javascript"); $path = constant('WP_PLUGIN_DIR'); //test with function $path_2 = WP_PLUGIN_DIR; // test directly //can cause a problem with older browsers?? use text/javascript ?> //////////////////// Begin Tests //////////// var templateDir = "<?php echo WP_PLUGIN_URL ?>" ; var templateDir2 = "<?php echo $path ?>" ; var templateDir3 = "<?php echo $path_2 ?>" ; var templateDir4 = "<?php echo constant("WP_PLUGIN_URL") ?>"; var templateDir5 = "<?php echo __FILE__ ?>"; var templateDir6 = "<?php echo plugins_url( 'somedir/somefile.png' , dirname(__FILE__)) ?>"; 

Результаты :

 var templateDir = "WP_PLUGIN_URL" ; // simply outputs a string of the constant name var templateDir2 = "" ; // null or empty var templateDir3 = "WP_PLUGIN_DIR" ;// simply outputs a string of the constant name var templateDir4 = "//Warning: constant() Couldn't find constant WP_PLUGIN_URL in .." var templateDir5 = "path.to.js.php" // only one that works ; var templateDir6 = "Call to undefined function plugins_url() in.. " 

поэтому мои тесты показали мне, что MAGIC CONSTANTS работают, но любой WP CONSTANT будет недоступен.

Это включает МОИ СОБСТВЕННЫЕ константы, которые были объявлены в файле plugin.php (на самом деле именно по этой причине я даже начал тестировать WP-константы)

Достаточно интересно – не только CONSTANTS недоступны, но любая функция wp возвращается «недоступна».

Постоянная PHP должна быть доступна в любое время через приложение. Это конкретная проблема WP? Это намеренно? или я делаю что-то неправильно?

ПРИМЕЧАНИЕ. Я знаю, что есть другие способы сделать это (например, использовать localize_script для передачи переменных в JS – или просто использовать функцию для вывода пути в заголовке), но сначала – эти методы не будут идеальными для меня – и что еще более важно это тот факт, что я хочу понять, почему этот метод терпит неудачу …

ИЗМЕНИТЬ I:

Альтух @ Матт Бекман указал в правильном направлении, что его конкретный метод не сработал. Верно, что файл WP должен быть включен. Для меня и следующая работа:

 include("../../../../wp-load.php"); require_once (dirname(dirname(dirname(dirname(dirname ( __FILE__))))).'/wp-load.php'); в include("../../../../wp-load.php"); require_once (dirname(dirname(dirname(dirname(dirname ( __FILE__))))).'/wp-load.php'); 

Оба, как вы можете себе представить, равны – но проблема остается: они несколько Hardcoded (например, @Salman A) предположили – что, если меняется плагин плагина? каково решение в этом случае?

Обратите внимание, что оба wp-load.php и wp-config.php работали для меня. Я не знаю, что лучше или может представлять некоторые проблемы с безопасностью.

но я думаю, это для другого вопроса ..

Итог: это решение только TEMP, пока я не найду правильный ответ. Мой плагин загружается через механизм плагина WORDPRESS (enqueue_script () / register_script () / init () и т. Д.) – и поэтому я не могу понять, почему он это делает. Бу сейчас это работает, как описано выше.

Будучи тем, что это включено как JavaScript, ваш file.js.php должен ссылаться на библиотеку WordPress, чтобы получить доступ к этим константам. В настоящее время, поскольку ваш код стоит, он не имеет никаких ссылок на эти константы.

__FILE__ не нужно ничего получать из WordPress, поэтому он работает так, как ожидалось.

Вам нужно будет включить некоторые require или include инструкции, ссылающиеся на определенные файлы WordPress PHP, которые вам нужны в верхней части file.js.php .

редактировать

Для получения доступа к этим константам используйте следующее в верхней части файла file.js.php:

 $home_dir = preg_replace('^wp-content/plugins/[a-z0-9\-/]+^', '', getcwd()); include($home_dir . 'wp-load.php'); 

Источник