В настоящее время я работаю над плагином для WordPress с большим количеством файлов .php. Я вижу, что для моего файла AddShift.php мы успешно импортируем заголовок блога, используя следующую строку кода:
include("../../../wp-blog-header.php");
Однако, когда я пытаюсь сделать то же самое в моем файле ajax_cal_split.php, я получаю следующую ошибку:
Warning: include(./wp-blog-header.php) [function.include]: failed to open stream: No such file or directory in /opt/lampp/htdocs/sandboxj/blog/wp-content/plugins/Shifty/ajax_cal_split.php on line 11 Warning: include() [function.include]: Failed opening './wp-blog-header.php' for inclusion (include_path='.:/opt/lampp/lib/php') in /opt/lampp/htdocs/sandboxj/blog/wp-content/plugins/Shifty/ajax_cal_split.php on line 11
Строка 11, конечно, говорит
include("../../../wp-blog-header.php");
Есть ли причина, по которой этот вызов работает в одном .php-файле, а не другой, когда они находятся в одном каталоге?
Да. Я считаю, что WordPress использует механизм безопасности для содержимого в каталоге wp-content, у меня была та же проблема с темами. Обходной путь, который я использовал, состоял в том, чтобы включить абсолютные имена путей.
Это ваше решение, чтобы получить реальный путь в файле плагина
<?php $scriptPath = dirname(__FILE__); $path = realpath($scriptPath . '/./'); $filepath = explode("wp-content",$path); // print_r($filepath); define('WP_USE_THEMES', false); require(''.$filepath[0].'/wp-blog-header.php');
Вы должны попробовать использовать константу WP_PLUGIN_URL, предоставляемую wordpress. Например, вы можете определить фактический URL-адрес плагина следующим образом:
define('MyPLUGIN_URL', WP_PLUGIN_URL.'/plugin_folder/');
а затем использовать его в своих вызовах, например:
include(MyPLUGIN_URL."wp-blog-header.php");
То, как я решаю проблему, извините за поздний ответ, но это может помочь следующим проверять.
он работает, делайте так, как предполагалось, и используйте абсолютный URL-адрес, я использовал
включает в себя ( "в.ч.-контент / Темы / YOUR_THEME / DESIRED_FILE.php");