Доступ к корневому каталогу сайта из папки "Темы"
Возникли некоторые проблемы с PHP-скриптом, который я пытаюсь создать.
Мне нужно получить доступ к файлу, который находится в корневой папке моей установки Wordpress:
Wordpress-root/live-config.php
Проблема в том, что мой файл сценария находится в корневой папке темы, и я пытаюсь получить доступ к корневой папке при определении константы.
Мой файл сценария находится в: корневой каталог/wp-контент/темы/корневой каталог тем/
Если я использую require ABSPATH . 'live-config.php';
, это бесполезно, потому что он выглядит в каталоге, в котором находится ваш текущий файл (т.Е. корневой каталог темы вместо моего корневого каталога wordpress).
Я просто хочу знать, как лучше всего было бы захватить корневую папку моей установки Wordpress при определении константы, которая находится в каталоге тем?
В моем сценарии я сейчас пытаюсь:
/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/**
* Define type of server
*
* Depending on the type other stuff can be configured
* Note: Define them all, don't skip one if other is already defined
*/
define( 'WP_DEV_SERVER', file_exists( ABSPATH . 'dev-config.php' ) );
/**
* Load DB credentials
*/
if ( WP_DEV_SERVER )
require ABSPATH . 'dev-config.php';
else
require ABSPATH . 'live-config.php';
Но, очевидно, определяющий ABSPATH в моем тема-корень на самом деле не указывает на каталог wordpress-корень.
2 answers
Я предполагаю, что вы говорите о файле конкретного сайта wp-config.php
, который находится в вашей папке "Темы".
В момент загрузки файла wp-config.php
WP загружен не полностью, поэтому у вас нет никаких констант или API файловой системы или других доступных базовых функций API.
Вот как я подхожу к этому:
Структура
# Dir structure
~/ROOT
├── config
├── wp-content
│ ├── themes
│ └── plugins
│ └── mu-plugins
Внутри папки config
я получил все конфигурационные файлы, относящиеся к конкретному сайту. Чтобы их было легко идентифицировать, они названы в честь домены, на которых они используются.
wp-config.php
# Config file suffix
! empty( $_SERVER['SERVER_NAME'] ) AND $suffix = $_SERVER['SERVER_NAME'];
! isset( $suffix ) AND ! empty( $_SERVER['HTTP_HOST'] ) AND $suffix = $_SERVER['HTTP_HOST'];
# CONFIG FILE PATH: Sub of root ~/config
$config_path = dirname( __FILE__ ).DS.'config';
// inside wp-config.php
# LOAD CONFIG FILE
// local
if ( file_exists( "{$config_path}/_local.php" ) )
{
require( "{$config_path}/_local.php" );
}
// Stage
elseif ( file_exists( "{$config_path}/{$suffix}-stage.php" ) )
{
require( "{$config_path}/{$suffix}-stage.php" );
}
// Production
elseif ( file_exists( "{$config_path}/{$suffix}.php" ) )
{
require( "{$config_path}/{$suffix}.php" );
}
unset( $suffix, $config_path );
Объяснение и недостатки
DS
это просто короткая константа, созданная для обертывания DIRECTORY_SEPARATOR
. Поскольку я использую его во многих местах и люблю, чтобы мои реплики были короткими, я установил его.
Таким образом, $suffix
- это то, что я извлекаю из SERVER_NAME
или HTTP_HOST
. Дело в том, что вы не можете быть уверены, какой из них установлен. Поэтому я проверяю и то, и другое.
$config_path
просто путь к текущему файлу + папка с именем config
на уровне ниже это.
Сами файлы называются example.com.php
. Так что я могу легко найти их, просто определив домен, и все готово. Это помогает содержать вещи в чистоте.
Первая проверка, которую я выполняю, касается файла _local.php
, в котором хранится моя локальная конфигурация. Я пропускаю этот шаг, удаляя эти строки для файлов, которые я использую на серверах. Это просто для того, чтобы запустить мою локальную установку.
Вторая проверка предназначена для файла stage
. Это также будет удалено на производственных сайтах.
Я надеюсь, что это помогает другим людям избегать таких вещей, как настройка, показанная здесь.
Попробуйте взглянуть на этот ответ в StackOverflow: https://stackoverflow.com/a/2356526/1077363 - это похоже на метод, который я использовал однажды раньше, но сейчас у меня нет этого кода под рукой.
Теория, лежащая в основе этого, заключается в том, что обычно вы находитесь всего в 2 или 3 каталогах ниже корневого каталога, поэтому проверка наличия wp-config.php
(которая большую часть времени хранится в корневом каталоге) с помощью file_exists()
скажет вам, нашли ли вы правильный каталог. Чтобы получить каталоги используйте dirname()
(если вы вложите их, как в другом ответе, вы попадете туда за меньшее время).
Надеюсь, это поможет, если вам понадобится дополнительная помощь, я могу откопать свой старый код позже вечером.