Intereting Posts

Создание динамического пути к wp-blog-header.php

Создал класс во внешнем скрипте, который зависит от среды WordPress. Поскольку это класс, который я намерен использовать в различных проектах, я решил динамически создать путь к wp-blog-header.php, и вот что я придумал. В настоящее время он работает для меня, но мне нужно обеспечить его надежную защиту.

$docRoot = $_SERVER['DOCUMENT_ROOT']; $scriptName = $_SERVER['SCRIPT_NAME']; $queryArray = explode("/", $scriptName); $queryLength = count($queryArray); require_once($docRoot . ($queryLength > 2 ? "/".$queryArray[$queryLength - 2] : "" ) . '/wp-blog-header.php'); 

У кого-нибудь есть лучшее решение или это достаточно хорошо, чтобы полагаться на него, независимо от местоположения сценария или установки установки WP?

В общем случае нет эффективного решения, кроме проверки всех доступных файлов и папок, а затем всех родительских папок.

Поскольку это не является выполнимой или оправданной операцией, выполняемой при каждой загрузке или запросе страницы, у вас останутся две другие опции:

  • Определите местоположение вручную, что не является необоснованным запросом
  • Сделайте предположения и ожидания относительно того, где WordPress можно найти относительно вашего файла

Последнее – это то, на что вы будете полагаться, если вы хотите автоматизировать все.

Проблемы, которые я вижу с вашим кодом:

  • Предполагается, что WordPress находится либо в одной папке, либо в двух папках вверх

Если вы согласны с этими предположениями, то да, ваш код безопасен для использования

Однако я бы рекомендовал вам вставить свой внешний скрипт в WordPress как плагин.

Согласно Кодексу,

http://codex.wordpress.org/Integrating_WordPress_with_Your_Website

 <?php require('/the/path/to/your/wp-blog-header.php'); ?> 

Независимо от того, надежны ли ваши средства и методы, полностью зависит от вашей установки и мест, где вы размещаете свои скрипты, относительно установки WordPress.

Предполагая, что вы соблюдаете соглашение, изложенное в вашем коде, вы должны быть в порядке.

Вы должны предоставить более подробный пример мест размещения сценариев (включая любые возможные варианты), в зависимости от местоположения WordPress, поэтому, если у кого-то есть что-то, что может улучшить ваш код, тогда будет смысл, так как ваш фрагмент будет локализован для вашего использования дело.

ОБНОВИТЬ#

(в ответ на ваш комментарий)

Путь к установке WordPress является константой, поэтому вместо того, чтобы придумать какой-то обман, выяснить, где находится этот путь, указать его как есть и полностью, как и в примере выше.

Если, например, ваш фактический путь (для localhost) – это что-то вроде;

 c:\apache\htdcos\wordpress 

…тогда,

 //document root being c:\apache\htdocs $_SERVER["DOCUMENT_ROOT"] . '/wordpress/wp-blog-header.php'; 

Найден ваш корень документа, для которого вы затем укажете каталог установки и файл wp-blog-header.php .

Затем я разместил файл .htaccess в c:\apache\htdocs который, помимо прочего, должен включать следующее:

 php_value auto_prepend_file "auto_inc.php" //the auto_inc.php can be a name of choice 

Это будет включать (auto_prepend) файл auto_inc.php перед любым другим файлом PHP, поэтому, если у вас есть структура каталогов, например,

 ..\htdocs\ (root) ..\htdocs\project1\ ..\htdocs\project2\ ..\htdocs\project-test\sample\ ..\htdocs\wordpress\ ..\htdocs\.htaccess ..\htdocs\auto_inc.php ..\htdocs\index.php 

Файл auto_inc.php будет включен в любой из подкаталогов, независимо от глубины.

Теперь в этом автоматически включенном файле вы можете поместить функцию, которая завершает require('/the/path/to/your/wp-blog-header.php'); для которых вы можете произвольно использовать в своих различных проектах, например;

 function wp_function_include() { $path = require('/the/path/to/your/wp-blog-header.php'); echo $path; } wp_functions_include(); //which fires the verbose require(path..wp-blog-header.php) 

Или, альтернативно, вам не нужно полностью обертывать require и иметь его в любом файле, подкаталоге, на любой глубине, без необходимости повторять его, чтобы вы могли сосредоточиться на своих проектах.

Увидев, что в каталоге /wordpress/ уже есть собственный .htaccess , он не будет затронут .htaccess найденным в его корневом каталоге, удалив любое столкновение между объявлением функций дважды.

Вам просто нужен следующий код для применения, чтобы получить реальный путь для wp-blog-header.php

 $scriptPath = dirname(__FILE__); $path = realpath($scriptPath . '/./'); $filepath = split("wp-content", $path); // print_r($filepath); define('WP_USE_THEMES', false); require(''.$filepath[0].'/wp-blog-header.php'); 

BTW, если вы хотите включить ядро ​​worpdress (+ функции темы), его лучше для пользователя:

 require('/wp-load.php'); 

и не

 require('/wp-blog-header.php');