从主题文件夹访问站点的根目录

时间:2012-11-02 作者:remi90

我试图构建的PHP脚本有一些问题。

我需要访问位于Wordpress安装根文件夹中的a文件:

wordpress-root/live-config.php

问题是,我的脚本文件位于主题的根文件夹中,在定义常量时,我试图访问根文件夹。

我的脚本文件位于:root-directory/wp-content/themes/theme-root/

如果我使用require ABSPATH . \'live-config.php\'; 这不好,因为它会在当前文件所在的目录中查找(即。theme-root 目录而不是我的wordpress-root).

我只是想知道,在定义主题目录中的常量时,最好的方法是获取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\';
但显然在我的theme-root 实际上并没有指向wordpress-root 目录

2 个回复
最合适的回答,由SO网友:kaiser 整理而成

我想你说的是一个特定的网站wp-config.php 位于主题文件夹中的文件。

在加载wp-config.php 文件,WP没有完全加载,所以您没有任何常量或文件系统API或其他可用的基本API函数。

以下是我的做法:

结构

# Dir structure
~/ROOT
├── config
├── wp-content
│   ├── themes
│   └── plugins
│   └── mu-plugins
内部config 文件夹中,我得到了所有特定于站点的配置文件。为了便于识别,它们以使用它们的域命名。

Thewp-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 文件这也将在生产站点上删除。

我希望这能帮助其他人避免类似的事情the setup shown here.

SO网友:ParkeyParker

请在StackOverflow上查看以下答案:https://stackoverflow.com/a/2356526/1077363 - 它看起来与我以前使用过的方法很相似,但现在还没有现成的代码。

其背后的理论是,通常根目录下只有2到3个目录,因此请检查是否存在wp-config.php (大部分时间存储在根目录中)使用file_exists() 将告诉您是否找到了正确的目录。要获取目录,请使用dirname() (如果你像在另一个答案中那样嵌套它们,你将在更少的LOC中到达那里)。

希望这有帮助,如果你需要更多帮助,我可以在今晚晚些时候找出我的旧代码。

结束