【问题标题】:Retrieve WordPress root directory path?检索 WordPress 根目录路径?
【发布时间】:2011-01-22 05:10:36
【问题描述】:

如何在 WordPress CMS 中检索根目录的路径?

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    查看 wordpress 根目录中 wp-config.php 文件的底部,您会发现如下内容:

    if ( !defined('ABSPATH') ) 定义('ABSPATH',目录名(__FILE__)。'/');

    查看示例文件:
    http://core.trac.wordpress.org/browser/trunk/wp-config-sample.php

    您可以在您的 wordpress 脚本的其他地方使用这个名为 ABSPATH 的常量,并且在大多数情况下,它应该指向您的 wordpress 根目录。

    【讨论】:

    • 这仅在 wp-config.php 已包含时才有用。在某些情况下(特别是对您的插件代码的上下文 ajax 调用)这不成立。
    • 您应该使用内置的 WordPress AJAX 处理程序来管理所有 AJAX 调用。
    • 更新:ABSPATH 现在定义在 wp-load.php 文件中,该文件始终包含在内,因此 wp-config.php 的包含不再有任何区别
    • @Lance Cleveland 在其他情况下,您可能还没有加载 WordPress,例如,如果您有一个动态生成的 javascript 或 css 文件需要找到 wp-load.php 的位置,那么它可以使用 get_option 或 get_theme_mod 函数。
    【解决方案2】:

    注意:这个答案真的很老了,从那以后,WordPress 领域的情况可能已经发生了变化。

    我猜您需要从您的插件或主题中检测 WordPress 根目录。 我在FireStats 中使用以下代码来检测安装了 FireStats 的 WordPress 插件的根 WordPress 目录。

    function fs_get_wp_config_path()
    {
        $base = dirname(__FILE__);
        $path = false;
    
        if (@file_exists(dirname(dirname($base))."/wp-config.php"))
        {
            $path = dirname(dirname($base))."/wp-config.php";
        }
        else
        if (@file_exists(dirname(dirname(dirname($base)))."/wp-config.php"))
        {
            $path = dirname(dirname(dirname($base)))."/wp-config.php";
        }
        else
            $path = false;
    
        if ($path != false)
        {
            $path = str_replace("\\", "/", $path);
        }
        return $path;
    }
    

    【讨论】:

    • 这很好,但是由于 OP 要求提供根目录,因此请确保 $path = dirname(... 的两条线都不以 ."/wp-config.php" 结尾
    • 请注意 wp-config.php 可以放在 wordpress 安装上方的一个文件夹中。使用 wp-load.php 或 wp-login.php 可能是更好的选择。
    • 如果您将文件名 wp-config.php 更改为应在调用时传递给函数的变量,如get_wp_path('wp-config.php');
    • 不不不!这怎么可能是一个公认的答案?不仅 OP 没有提到他的代码在插件中,而且应该始终避免依赖这种脆弱的代码。 Wordpress 结构可能会演变。如果你真的需要知道 Wordpress 的根目录,那可能是概念上的错误。尝试将您的文件存储在其他位置,该位置将位于您从中加载文件的已知相对路径中。无论如何,如果您仍然真的需要使用根目录,Wordpress 3 现在具有 ABSPATH 常量,它具有您正在寻找的东西。对于以前的版本,只需检查 wp-load.php 的代码
    • 只使用已经可用的 ABSPATH 常量。接受的答案应该是 Jaya Kuma 的以下答案。
    【解决方案3】:

    这是一个老问题,但我有一个新答案。这一行将返回模板内的路径::)

    $wp_root_path = str_replace('/wp-content/themes', '', get_theme_root());
    

    【讨论】:

    • 假设模板在 wp-content 之前存在,但情况可能并非如此。您可以在安装 WP 时重新定义内容目录的名称。通常不建议这样做,因为许多插件都会做出同样的假设并中断,但这种可能性是存在的。但是,在这里继续重复那些不正确的假设是没有意义的。
    • 老实说,我不知道 wp-content 可以重命名。在这种情况下,您可以将我的代码 sn-p 中的 wp-content 更改为修改后的名称,它仍然可以工作。
    【解决方案4】:

    echo ABSPATH; // 这里显示的是 WordPress 的绝对路径

    ABSPATH 是 wp-config.php 文件中定义的常量。

    【讨论】:

    • 我同意!简单而客观。
    • 这是正确答案。似乎 get_home_path() 仅在管理区域中有效。
    • 这仅适用于您的文件已经在 WordPress 上下文中运行的情况。
    【解决方案5】:

    您可以使用 get_site_url() 函数来获取 wordpress 站点的基本 url。

    欲了解更多信息,请访问http://codex.wordpress.org/Function_Reference/get_site_url

    【讨论】:

    • 问题是要求文件路径而不是 url
    • OP 要求的是路径而不是 url
    【解决方案6】:

    此问题 Url & directory 有 2 个答案。无论哪种方式,优雅的方式是定义两个常量供以后使用。

    define (ROOT_URL, get_site_url() );
    define (ROOT_DIR, get_theme_root() );
    

    【讨论】:

      【解决方案7】:

      我认为这样可以解决问题:

      function get_wp_installation()
      {
          $full_path = getcwd();
          $ar = explode("wp-", $full_path);
          return $ar[0];
      }
      

      【讨论】:

      • 这不能在插件中使用,因为可以将 Wordpress 配置为将插件文件夹放在 Wordpress 根目录之外。另请注意,如果目的是动态加载“wp-load.php”,则不应使用这种方法,因为这不安全。
      【解决方案8】:
         Please try this for get the url of root file.
      

      第一种方式:

       $path = get_home_path();
         print "Path: ".$path; 
      // Return "Path: /var/www/htdocs/" or
      
      // "Path: /var/www/htdocs/wordpress/" if it is subfolder
      

      第二种方式:

      And you can also use 
      
          "ABSPATH"
      
      this constant is define in wordpress config file.
      

      【讨论】:

        【解决方案9】:

        如果您加载了 WordPress 引导程序,您可以使用 get_home_path() 函数获取 WordPress 根目录的路径。

        【讨论】:

        • get_home_patth 是一个核心功能,你不需要boostrap来访问它。
        【解决方案10】:

        要检索路径,您可以使用函数<?php $path = get_home_path(); ?>。我不想只是重复这里已经说过的话,但我想再补充一点:

        如果您使用的是 windows 服务器,这在 WordPress 安装中很少见,但有时仍会发生,您可能会遇到路径输出问题。它可能会在某处遗漏“\”,如果您将使用这样的路径,您将收到错误消息。所以在输出时一定要清理路径:

        <?php 
        
        $path = get_home_path(); 
        $path = wp_normalize_path ($path);
        
        // now $path is ready to be used :)
        
        ?>
        

        【讨论】:

          【解决方案11】:

          主题根目录路径代码

           <?php $root_path = get_home_path(); ?> 
          print "Path: ".$root_path;
          

          返回“路径:/var/www/htdocs/”或“路径: /var/www/htdocs/wordpress/" 如果是子文件夹

          主题根路径

           $theme_root = get_theme_root();
           echo $theme_root
          

          结果:- /home/user/public_html/wp-content/themes

          【讨论】:

            【解决方案12】:

            试试这个函数获取根目录路径:

            get_template_directory_uri();
            

            【讨论】:

            • 首先返回当前模板的路径,其次返回URI,而不是文件系统路径。
            • 正如加文所说,这并不能回答问题。
            • 这将返回一个 URI 而不是文件系统路径。不过努力。
            【解决方案13】:

            我喜欢@Omry Yadan 的解决方案,但我认为可以改进使用循环,以防您想继续向上遍历目录树,直到找到wp-config.php 实际所在的位置。当然,如果你没有找到它并最终进入服务器的根目录,那么一切都会丢失,我们会返回一个正常的值 (false)。

            function wp_get_web_root() {
            
              $base = dirname(__FILE__);
              $path = false;
            
              while(!$path && '/' != $base) {
                if(@file_exists(dirname($base)).'/wp-config.php') {
                  $path = dirname($base);
                } else {
                  $base = dirname($base);
                }
              }
            
              return $path;
            }
            

            【讨论】:

              【解决方案14】:

              我喜欢接受的答案和@cfx 的解决方案,但它们可以进一步整合:

              function base_dir () {
                  $path = dirname(__FILE__);
                  while (true) {
                      if (file_exists($path."/wp-config.php")) {
                          return $path."/";
                      }
                      $path = dirname($path);
                  }
              }
              

              这允许您在 WordPress 未加载的文件中查找基本目录,例如动态创建的 javascript 和 css 文件。

              【讨论】:

              • 如果函数在各级都找不到wp-config.php,会发生什么?
              • 那么无限循环,但假设您在 WordPress 安装中使用此功能,这永远不会发生,因为 wp-config.php 文件将始终存在。但是,如果您对此感到担忧,您可以随时添加一个计数器并在某个阈值之后停止循环。
              【解决方案15】:

              为什么要搞得这么复杂?一条命令:

              Nginx

              grep -i 'root' /etc/nginx/sites-enabled/*

              阿帕奇

              grep -i 'DocumentRoot' /etc/apache2/sites-enabled/*

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-09-07
                • 2011-04-13
                • 2016-01-12
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-08-22
                • 1970-01-01
                相关资源
                最近更新 更多