【问题标题】:Get WordPress installation folder path获取WordPress安装文件夹路径
【发布时间】:2012-06-12 02:53:33
【问题描述】:

有没有办法获取安装 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 安装路径的重点是在多个 WordPress 安装中require "wp-blog-header.php";,其中每个安装使用不同的文件夹(example.com/blog-one 和 example.com/blog-two),不是 WordPress MU 或多站点。

注意:2 如果我使用 require "wp-blog-header.php"; 而不是 require "$root/$dir/wp-blog-header.php";,只要文件在同一个文件夹中,它就可以工作,但在我的情况下,文件有时会在不同的文件夹中文件夹。

【问题讨论】:

  • 数据库查询呢? Wordpress 也将此变量保存在其 wp_config 中?
  • @JureC。您会通过示例将其发布为答案吗?这是个好主意。

标签: wordpress root document-root realpath installation-path


【解决方案1】:

使用 ABSPATH 常量:

<?php echo ABSPATH ?>

这应该打印您的 WordPress 路径。

【讨论】:

    【解决方案2】:

    如果你想要的只是被调用文件所在的当前目录,那么我会使用:

    realpath(dirname(__FILE__))
    

    这在很大程度上取决于文件所在的位置。如果它与 WordPress 安装在同一目录中,那么它将类似于:

    <?php
        $root = realpath(dirname(__FILE__));
        require "$root/wp-blog-header.php";
    ?>
    

    【讨论】:

    • 很抱歉,但这没有用。我需要用其他东西替换 'FILE' 吗?因为您在答案中发布的内容不起作用。
    • 很抱歉。忘记添加目录名以从路径中删除文件名。刚刚更新了。你应该按原样输入。
    • 很抱歉,但它仅在脚本位于同一文件夹中时才有效。我正在寻找一种更灵活的解决方案,一种可以在问题注释 2 中所述的任何文件夹上工作的解决方案。
    • 不幸的是,您所描述的内容将要求您以某种方式跟踪文件的位置并以这种方式引用路径。相反,我建议在每个 Wordpress 目录中都有一个脚本,然后调用其余代码的通用位置。基本上是一个加载器脚本。其他任何事情都将难以实施并且长期管理起来很痛苦。
    【解决方案3】:

    如果可以到达数据库,则需要这样做

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

    在文件 wp-blog-header.php 中。

    然后从任何应用程序连接到数据库并使用以下查询检索路径:

    select option_value from wp_options where option_name ='wp_dir';
    

    当然,您需要知道数据库名称和 WordPress 表前缀。

    PS:这可能是也可能不是您的解决方案,但它是其中一种方法。

    【讨论】:

      【解决方案4】:

      根示例:

      • /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.
      

      这使得脚本独立。该脚本适用于任何 WordPress 安装安装中的任何文件夹,只要该文件夹的编号为 8。如果安装在子文件夹中,则必须增加编号 8。还要记住,当前路径可能有更多或更少的文件夹,这意味着必须相应地调整脚本。

      注意:这将通过“硬编码”路径上的文件夹位置来工作,只要所有安装位置相同,脚本就可以工作。另一种方法是硬编码。

      【讨论】:

        【解决方案5】:

        这就是我正在做的事情:

        设置

        $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 变量之前肯定需要进行清理(并且我需要在我的本地主机环境之外对其进行三次检查),但我认为它不需要进行严格的修改才能成为一个实用的通用解决方案。

        【讨论】:

          【解决方案6】:
          $WP_PATH = implode("/", (explode("/", $_SERVER["PHP_SELF"], -4)));
          

          将为您提供准确的 WordPress 根目录。

          例如,您的根地址是 www.myroot.com,而您的 WordPress 站点位于 public_html 中的 WordPress 文件夹中,那么 wwww.myroot.com/wordpress/ 将是 $WP_PATH 中的结果。在这种情况下,您当前的文件名应该在您的插件根目录中。就像 some_plugin 是我的插件名称。所以完整的路径会变成:

          localhot/wordpress/wp_content/plugins/some_plugin/
          

          localhot/wordpress/wp_content/plugins/some_plugin/myfile.php 是我编写此脚本的文件名,将给我/wordpress。这对我有用,因为我想要我的 wordpress 目录名称。所以寻找这样的内容:

          $WP_PATH = implode("/", (explode("/", $_SERVER["PHP_SELF"], -4)));
          require_once( $_SERVER['DOCUMENT_ROOT'].$WP_PATH '/wp-load.php');
          

          【讨论】:

            【解决方案7】:

            这是在 WordPress 中的操作方法(这不是提问者所要求的,但我怀疑很多人会搜索...)

            有一个专用函数get_home_path(),它会给你类似的东西:

            /srv/www/my-site/htdocs/
            

            Other functions for file and content directories(和网络路径)。

            【讨论】:

              【解决方案8】:

              为什么不在 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)));
              

              将返回“”

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-02-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-03-25
                • 2017-11-03
                相关资源
                最近更新 更多