web-dev-qa-db-ja.com

Wp-blog-header.phpへの動的パスを作成する

Wordpress環境に依存する外部スクリプトでクラスを作成しました。これはさまざまなプロジェクトで使用する予定のクラスなので、wp-blog-header.phpへのパスを動的に作成することにしました。これが私が思いついたものです。それは現在私のために働きます、しかし私はその絶対確実性を確実にする必要があります。

$docRoot = $_SERVER['DOCUMENT_ROOT'];
$scriptName = $_SERVER['SCRIPT_NAME'];
$queryArray = explode("/", $scriptName);
$queryLength = count($queryArray);

require_once($docRoot . ($queryLength > 2 ? "/".$queryArray[$queryLength - 2] : "" ) . '/wp-blog-header.php');

スクリプトの場所やWPインストールの設定に関係なく、誰かがより良い解決策を持っていますか、またはこれで十分に信頼できますか?

3
akamaozu

一般的なケースでは、公的にアクセス可能なすべてのファイルとフォルダをチェックし、それからすべての親フォルダをチェックする以外にパフォーマンスのよい解決策はありません。

これはすべてのページの読み込みや要求に対して実行できる実行可能または排除可能な操作ではないため、他に2つのオプションがあります。

  • 手動で場所を定義します。これは不当な要求ではありません
  • あなたのファイルと比較してどこでWordPressが見つかるかについての仮定と期待をしてください

後者は、自動化したい場合に頼りになるものです。

あなたのコードで私が見る問題:

  • WordPressは同じフォルダか2つ上のフォルダのどちらかにあると仮定します。

これらの仮定に問題がなければ、はい、あなたのコードは安全に使用できます。

ただし、外部スクリプトをプラグインとしてWordPressにロールインすることをお勧めします。

2
Tom J Nowell

コーデックスに従って、

http://codex.wordpress.org/Integrated_WordPress_with_Your_Website

<?php
require('/the/path/to/your/wp-blog-header.php');
?>

あなたの手段と方法が確実であるかどうかは、あなたのセットアップとあなたがあなたのスクリプトを置いている場所に、あなたのWordPressインストールとの関係で完全に依存しています。

あなたがあなたのコードで概説された規約に従うと仮定すると、あなたは大丈夫なはずです。

WordPressの場所と対比して、スクリプトの場所(考えられるバリエーションも含む)のより詳細な例を提供する必要があります。場合。

更新#

(あなたのコメントに応えて)

あなたのWordPressインストールへのパスは一定です、それで、そのパスがどこにあるかを理解するためにいくらかのトリックを工夫する代わりに、上の例のようにそのままそして完全にそれを述べてください。

たとえば、実際のパス(localhostの場合)が次のようになっているとします。

c:\Apache\htdcos\wordpress

…そして、

//document root being c:\Apache\htdocs

$_SERVER["DOCUMENT_ROOT"] . '/wordpress/wp-blog-header.php';

あなたのドキュメントルートを探します。そのために、インストールディレクトリとwp-blog-header.phpファイルを指定します。

それから私は.htaccessファイルをc:\Apache\htdocsに置くでしょう。

php_value auto_prepend_file "auto_inc.php" //the auto_inc.php can be a name of choice

これは、他のPHPファイルの前にauto_inc.phpファイルが(auto_prepend)含まれるようになります。

..\htdocs\ (root)
..\htdocs\project1\
..\htdocs\project2\
..\htdocs\project-test\sample\
..\htdocs\wordpress\
..\htdocs\.htaccess
..\htdocs\auto_inc.php
..\htdocs\index.php

auto_inc.phpファイルは、深さに関係なく、任意のサブディレクトリに含まれます。

この自動的にインクルードされたファイル内に、さまざまなプロジェクト内で任意に使用できるrequire('/the/path/to/your/wp-blog-header.php');をラップする関数を配置できます。

function wp_function_include() {

$path = require('/the/path/to/your/wp-blog-header.php');

echo $path;

}

wp_functions_include(); //which fires the verbose require(path..wp-blog-header.php)

あるいは、requireをまったくラップする必要はなく、すべてのファイル、サブディレクトリ、深さを問わずに使用できるようにしておく必要がないため、プロジェクトに集中できます。

/wordpress/ディレクトリはすでにそれ自身の.htaccessを持っているので、それはそのルートディレクトリ内にある.htaccessの影響を受けず、2回宣言する関数間の衝突を取り除きます。

1
userabuser

wp-blog-header.phpの実際のパスを取得するには、以下のコードを適用するだけです。

$scriptPath = dirname(__FILE__);
$path = realpath($scriptPath . '/./');
$filepath = split("wp-content", $path);
// print_r($filepath);
define('WP_USE_THEMES', false);
require(''.$filepath[0].'/wp-blog-header.php');
0
Keshav Kalra

ところで、あなたがworpdressコア(+テーマ機能)を含めたいのなら、それはユーザーにとってより良い:

require('/wp-load.php');

そしてNOT

require('/wp-blog-header.php');
0
T.Todua