web-dev-qa-db-ja.com

Themesフォルダからサイトのルートにアクセスする

私が構築しようとしている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ディレクトリを指すことはありません。

1
remi90

テーマフォルダにあるサイト固有の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 );

説明と欠点

DSDIRECTORY_SEPARATORをラップするために作られた単なる短い定数です。たくさんの場所で使っていて、線を短くしたいので、設定します。

$suffixSERVER_NAMEまたはHTTP_Hostから取得したものです。重要なのは、どちらが設定されているのかわからないということです。だから私は両方をテストしています。

$config_pathは単に現在のファイルのパス+その下のレベルのconfigという名前のフォルダーです。

ファイル自体はexample.com.phpという名前です。だから私は単にドメインを識別することによってそれらを簡単に見つけることができ、私はやった。これは物事をきれいに保つのに役立ちます。

私が最初に行うチェックは、私のローカル設定を保持する_local.phpファイルに対するものです。サーバー上で使用しているファイルの行を削除して、この手順を省略します。ローカルセットアップを実行するためのものです。

2番目のチェックはstageファイルです。これは本番サイトでも削除されます。

私はこれが他の人々が ここで示されている設定 のようなことを避けるのを助けるのを願っています。

1
kaiser

StackOverflowでこの答えを見てみてください。 https://stackoverflow.com/a/2356526/1077363 - それは私の方法に似て以前に1回使用されていましたが、今すぐに渡すコードはありません。

その背後にある理論は、通常はルートディレクトリの2〜3ディレクトリ下にあるだけなので、file_exists()を使用してwp-config.php(これはほとんどの場合ルートディレクトリに格納されています)の存在を調べる正しいディレクトリディレクトリを立ち上げるにはdirname()を使います(他の答えのように入れ子にした場合、より少ないLOCでそこに着くでしょう)。

あなたが私が今夜私の古いコードを後で掘り下げることができるより多くの援助を必要とするならば、これが助けになることを願っています。

1
ParkeyParker