Я столкнулся с проблемой, которую не могу понять.
Во время разработки плагина я включаю файл file.js.php (регистрация/постановка в очередь).
<?
/*
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)
Довольно интересно - недоступны не только КОНСТАНТЫ, но любая функция wp возвращает "недоступно".
Константы PHP предназначены для постоянного доступа через приложение. Это конкретная проблема WP? Это намеренно? или я что-то не так делаю?
ПРИМЕЧАНИЕ. Я знаю, что есть и другие способы сделать это (например, использовать localize_script для передачи переменных в JS или просто использовать функцию для вывода пути в заголовок) — но во-первых — эти методы не будут идеальными. для меня - и что более важно, это тот факт, что я хочу понять, почему этот метод не работает ...
РЕДАКТИРОВАТЬ I:
Хотя @Matt Beckman указал в правильном направлении, его конкретный метод не работал. Правда файл с WP должен быть включен.Для меня обе следующие работы:
include("../../../../wp-load.php");
require_once (dirname(dirname(dirname(dirname(dirname ( __FILE__))))).'/wp-load.php');
Оба, как вы можете себе представить, равны, но проблема остается: они несколько жестко запрограммированы (например, @Salman A) предложены - что, если каталог плагина изменится?? какое решение в таком случае?
Обратите внимание, что у меня работали как wp-load.php
, так и wp-config.php
. Я не знаю, что лучше или что может представлять некоторые проблемы с безопасностью.
но я думаю, что это для другого вопроса..
Итог: это решение только TEMP, пока я не найду правильный ответ. Мой плагин загружается через механизм плагинов WORDPRESS (enqueue_script() / register_script() / init() и т. д.) - и поэтому я не могу понять, почему это происходит. Но пока он работает так, как описано выше.