5

WordPress がインストールされている場所へのパスを取得する方法はありますか?

私は以下を使用していました:

$root = realpath($_SERVER["DOCUMENT_ROOT"]);

www.example.com -> /usr/local/pem/vhosts/165312/webspace/httpdocs で問題ありません

フォルダー名 (ブログ) をハードコーディングする必要があるため、www.example.com/blog には適していません。

後でこれを使用して方法を見つけました:

$iroot = getcwd();
$folder = explode("/", $iroot);
$dir = $folder[8]; // I know is 8
$root = realpath($_SERVER["DOCUMENT_ROOT"]);
require "$root/$dir/wp-blog-header.php";

しかし、それでも複雑なことがたくさんあります。ハードコーディングせずに WordPress がインストールされている場所 (パス) を取得する簡単な方法はありますか?

注: 1これは WordPress の外部にあるため、WordPress の機能は動作しません。最後の例で述べたように、WordPress のインストール パスを決定するポイントは、require "wp-blog-header.php";WordPress MU ではなく、各インストールが異なるフォルダー (example.com/blog-one と example.com/blog-two) を使用する複数の WordPress インストールであることにあります。またはマルチサイト。

注:2ファイルが同じフォルダーにある限り、require "$root/$dir/wp-blog-header.php";使用する代わりに機能しますが、私の場合、ファイルは別のフォルダーにある場合があります。require "wp-blog-header.php";

4

8 に答える 8

8

ABSPATH定数を使用します。

<?php echo ABSPATH ?>

これにより、WordPressパスが印刷されます。

于 2012-06-08T22:17:54.920 に答える
3

これが私がやっていることです:

セットアップ:

$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');

これは、スクリプトがどこにあるかに関係なく、WordPress 環境をインスタンス化するために現時点で非常にうまく機能しています。$_SERVER変数を使用する前に必ずサニタイズする必要があります (そして、ローカルホスト環境の外でこれをトリプルチェックする必要があります)。

于 2012-08-09T20:39:16.460 に答える
2

ルートの例:

  • / usr / local / pem / vhosts / 165312 / webspace / httpdocs / blog-one
  • / usr / local / pem / vhosts / 165312 / webspace / httpdocs / blog-two
  • / usr / local / pem / vhosts / 165312 / webspace / httpdocs / some-blog

以下の例は、任意のブログ( "blog-one"、 "blog-two"、および "some-blog")で機能し、スクリプトまたはファイルはブログの任意のサブフォルダーにインストールできます。

$current_path = getcwd(); // Get the current path to where the file is located
$folder = explode("/", $current_path); // Divide the path in parts (aka folders)
$blog = $folder[8]; // The blog's folder is the number 8 on the path

// $root = path without the blog installation folder.
$root = realpath($_SERVER["DOCUMENT_ROOT"]);

// Now I can require any WordPress file
require "$root/$dir/wp-blog-header.php";

// For the current installation
// For example, wp-blog-header.php to get the blog name or
// wp-config.php to access the database.

これにより、スクリプトが独立します。スクリプトは、フォルダーが番号8である限り、任意のWordPressインストールインストールの任意のフォルダーで機能します。インストールがサブフォルダーにある場合は、番号8を増やす必要があります。また、現在のパスにはフォルダが多かれ少なかれ含まれている可能性があることにも注意してください。つまり、それに応じてスクリプトを調整する必要があります。

:これは、パス上のフォルダーの位置を「ハードコーディング」することで機能し、すべてのインストールが同じ位置にある限り、スクリプトは機能します。もう1つの方法は、ハードコーディングすることです。

于 2012-06-13T15:38:16.870 に答える
2

あなたがしようとしているのが、呼び出されているファイルが置かれている現在のディレクトリだけである場合、私は次を使用します:

realpath(dirname(__FILE__))

これの多くは、ファイルがどこにあるかによって異なります。WordPress インストールと同じディレクトリにある場合は、次のようになります。

<?php
    $root = realpath(dirname(__FILE__));
    require "$root/wp-blog-header.php";
?>
于 2012-06-10T02:28:13.210 に答える
2

これはWordPress内から行う方法です(質問者が求めていたものではありませんが、多くの人が検索していると思います...)

専用の関数get_home_path()があり、次のような結果が得られます。

/srv/www/my-site/htdocs/

ファイルおよびコンテンツ ディレクトリ(および Web パス) のその他の関数。

于 2014-12-03T21:14:18.170 に答える
1

データベースにアクセスできる場合は、次のことを行う必要があります

update_option('wp_dir',dirname(__FILE__));

ファイル wp-blog-header.php 内。

次に、任意のアプリケーションからデータベースに接続し、次のクエリでパスを取得します。

select option_value from wp_options where option_name ='wp_dir';

もちろん、データベース名と WordPress テーブルの接頭辞を知っておく必要があります。

PS: これはあなたの解決策かもしれませんし、そうでないかもしれませんが、方法の 1 つです。

于 2012-06-13T13:14:15.640 に答える
0

wp-config.php で単純に次のようにしないのはなぜですか。

$WP_PATH = implode("/", (explode("/", $_SERVER["PHP_SELF"], -1)));

例えば

$WP_PATH = implode("/", (explode("/", "/one/two/three/index.php", -1)));

「/one/two/three」を返し、

$WP_PATH = implode("/", (explode("/", "/index.php", -1)));

戻ります ""

于 2013-03-15T03:11:03.190 に答える