私が構築しようとしているPHPスクリプトに問題がある。
私のWordpressインストールのルートフォルダにあるファイルにアクセスする必要があります。
wordpress-root/live-config.php
問題は、私のスクリプトファイルがテーマのルートフォルダの中にあり、定数を定義するときにルートフォルダにアクセスしようとしていることです。
私のスクリプトファイルはルートディレクトリ/ wp-content/themes/theme-root /にあります。
私がrequire ABSPATH . 'live-config.php';
を使ったとしても、それはあなたの現在のファイルがあるディレクトリ(すなわち、私のwordpress-rootの代わりにtheme-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でABSPATHを定義しても、実際にwordpress-rootディレクトリを指すことはありません。
テーマフォルダにあるサイト固有のwp-config.php
ファイルについて話していると思います。
wp-config.php
ファイルを読み込んでいる時点では、WPは完全に読み込まれていないので、定数やファイルシステムAPI、その他の基本的なAPI関数を利用することはできません。
これが私がこれに取り組む方法です:
# Dir structure
~/ROOT
├── config
├── wp-content
│ ├── themes
│ └── plugins
│ └── mu-plugins
config
フォルダーの中に、サイト固有のallconfigファイルがあります。簡単に識別するために、使用されているドメインにちなんで名前が付けられています。
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
ファイルに対するものです。サーバー上で使用しているファイルの行を削除して、この手順を省略します。ローカルセットアップを実行するためのものです。
2番目のチェックはstage
ファイルです。これは本番サイトでも削除されます。
私はこれが他の人々が ここで示されている設定 のようなことを避けるのを助けるのを願っています。
StackOverflowでこの答えを見てみてください。 https://stackoverflow.com/a/2356526/1077363 - それは私の方法に似て以前に1回使用されていましたが、今すぐに渡すコードはありません。
その背後にある理論は、通常はルートディレクトリの2〜3ディレクトリ下にあるだけなので、file_exists()
を使用してwp-config.php
(これはほとんどの場合ルートディレクトリに格納されています)の存在を調べる正しいディレクトリディレクトリを立ち上げるにはdirname()
を使います(他の答えのように入れ子にした場合、より少ないLOCでそこに着くでしょう)。
あなたが私が今夜私の古いコードを後で掘り下げることができるより多くの援助を必要とするならば、これが助けになることを願っています。