Доступ к корневому каталогу сайта из папки "Темы"


Возникли некоторые проблемы с 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-корень.

Author: remi90, 2012-11-02

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. Это также будет удалено на производственных сайтах.

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

 1
Author: kaiser, 2012-11-02 12:37:14

Попробуйте взглянуть на этот ответ в StackOverflow: https://stackoverflow.com/a/2356526/1077363 - это похоже на метод, который я использовал однажды раньше, но сейчас у меня нет этого кода под рукой.

Теория, лежащая в основе этого, заключается в том, что обычно вы находитесь всего в 2 или 3 каталогах ниже корневого каталога, поэтому проверка наличия wp-config.php (которая большую часть времени хранится в корневом каталоге) с помощью file_exists() скажет вам, нашли ли вы правильный каталог. Чтобы получить каталоги используйте dirname() (если вы вложите их, как в другом ответе, вы попадете туда за меньшее время).

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

 1
Author: ParkeyParker, 2017-05-23 11:33:33