【问题标题】:How can I get the current plugin directory in WordPress?如何获取 WordPress 中的当前插件目录?
【发布时间】:2011-03-08 22:01:00
【问题描述】:

我需要获取当前插件目录,如:

[wordpress_install_dir]/wp-content/plugins/plugin_name

(如果在插件中调用getcwd(),则返回[wordpress_install_dir],即安装的根目录。)

【问题讨论】:

    标签: php wordpress plugins


    【解决方案1】:

    使用专为此目的设计的 WordPress 核心功能:

    <?php plugin_dir_path( __FILE__ ); ?>
    

    请参阅 Codex 文档here

    你也有

    <?php plugin_dir_url( __FILE__ ); ?>
    

    如果您要查找的是 URI 而不是服务器路径。

    请参阅 Codex 文档here

    IMO,最好使用核心中可用的最高级别方法,就是这样。它使您的代码更具前瞻性。

    【讨论】:

    • 此外,如果您尝试获取与该插件目录相关的位置中的资源,请使用plugins_url( 'images/image_inside_plugin_folder.png' , __FILE__ )
    • 这是正确答案。如果将插件用作 MU(必须使用)插件,则 WP_PLUGIN_URL 将不起作用,而 plugin_dir_path() 和 plugin_dir_url() 将起作用。
    • 感谢您提供 codex 文档。我发现 FILE 对我有用。
    • @Andy 如果你有一个 mu-plugin 并且正在使用 load.php 方法,那么 plugin_dir_url() 会解析为 wp-content/mu-plugin 而不是 wp-content/mu-plugin/your-插件名称,因此您的评论仅部分正确。
    • 尽管有名字,plugin_dir_path 不一定获取插件目录,它获取作为第一个参数传递的路径的父目录。所以如果__FILE__不在插件目录下,plugin_dir_path( __FILE__ )就不会返回插件目录。见more information on plugin_dir_path
    【解决方案2】:

    看 OP 自己的答案,我认为 OP 想要;

    $plugin_dir_path = dirname(__FILE__);
    

    【讨论】:

    • 在 PHP 5.3 中,您可以使用新的常量__DIR__,实现同样的目的。
    • 你快到了。哎呀,您甚至将该变量命名为与执行您想要的内置 WordPress 函数相同的名称。通过使用推荐的 WordPress 功能来做你想做的事,让你的代码面向未来。看我的回答。
    • 不,它更具前瞻性,因为如果核心团队出于某种原因决定改变架构或机制,他们将修改 plugin_dir_path() 函数以反映这种变化,而直接调用然后 dirname( $file ) 将被搁浅。如果核心中存在一个函数,请使用它,即使它看起来只是一个无意义的包装器。
    • 别误会,我知道这是“正确”的 WordPress 方式。但让我们明确一点;该函数的唯一目的是返回给定文件目录的绝对尾部斜线路径。即使它被修改了,或者 WP 文件系统改变了,它仍然需要返回 dirname( __FILE__ ) . '/' 的等价物。其他任何东西都会损害使用它的任何插件的功能。
    • 这仅在调用它的文件位于插件的根目录中时才有效。例如,如果您在插件中有子文件夹,并且您从其中一个文件夹中调用它,您最终会得到该子文件夹的路径!
    【解决方案3】:

    这实际上会得到你想要的结果:

    <?php plugin_dir_url(__FILE__); ?>
    

    plugin_dir_url(string $file)

    【讨论】:

    • 这将返回一个 URL 而不是服务器路径名。虽然在某些情况下很方便,但并不是问题的真正答案。
    • 试过用这个,但我被禁止访问
    【解决方案4】:

    要获取插件目录,您可以使用 WordPress 函数plugin_basename($file)。所以你可以使用它来提取插件的文件夹和文件名:

    $plugin_directory = plugin_basename(__FILE__);
    

    您可以将其与插件目录的 URL 或服务器路径结合使用。因此,您可以使用常量WP_PLUGIN_URL 获取插件目录 URL 或使用WP_PLUGIN_DIR 获取服务器路径。但是正如Mark Jaquith 在下面的评论中提到的那样,这仅在插件位于 WordPress 插件目录中时才有效。

    WordPress codex 中了解更多信息。

    【讨论】:

    • 不要使用WP_PLUGIN_URLWP_PLUGIN_DIR — 插件可能不在插件目录中。
    • 谢谢,我已将其添加到我的答案中。
    【解决方案5】:
    $full_path = WP_PLUGIN_URL . '/'. str_replace( basename( __FILE__ ), "", plugin_basename(__FILE__) );
    
    • WP_PLUGIN_URL – 插件目录的 URL
    • WP_PLUGIN_DIR – 插件目录的服务器路径

    此页面可能会有所帮助:Determining Plugin and Content Directories

    【讨论】:

      【解决方案6】:

      试试这个:

      function PluginUrl() {
      
          // Try to use the WordPress API if possible, introduced in WordPress 2.6
          if (function_exists('plugins_url'))
              return trailingslashit(plugins_url(basename(dirname(__FILE__))));
      
          // Try to find it manually... can't work if wp-content was renamed or is redirected
          $path = dirname(__FILE__);
          $path = str_replace("\\", "/", $path);
          $path = trailingslashit(get_bloginfo('wpurl')) . trailingslashit(substr($path, strpos($path, "wp-content/")));
          return $path;
      }
      

      echo PluginUrl(); 将返回当前插件 URL。

      【讨论】:

        【解决方案7】:

        从 WordPress 2.6.0 开始,您可以使用plugins_url() 方法。

        【讨论】:

        • 这将返回 URL 而不是文件系统路径。
        • @Flimm,通过一个小技巧,你可以获得完整的插件文件系统路径:str_replace(site_url('/'), ABSPATH, plugins_url());
        【解决方案8】:

        当我需要获取目录时,不仅是插件(plugin_dir_path),而是更通用的目录,您可以使用__DIR__。它将为您提供被调用文件的目录路径。现在您可以从 functions.php 或其他文件中使用!

        说明

        文件的目录。如果在包含中使用,则目录 返回包含的文件。这相当于 目录名(__FILE__)。此目录名称没有尾部斜杠 除非它是根目录。 [1]1

        【讨论】:

          【解决方案9】:

          如果要获取文件中的当前目录路径,可以将魔术常量__FILE____DIR__plugin_dir_path() 函数结合使用:

          $dir_path = plugin_dir_path( __FILE__ );
          

          当前目录路径:

          /home/user/var/www/wordpress_site/wp-content/plugins/custom-plugin/
          

          __FILE__ 魔术常量返回当前目录路径。

          如果你想从当前目录上一级,你应该使用__DIR__这个魔法常数:

          当前路径:

          /home/user/var/www/wordpress_site/wp-content/plugins/custom-plugin/
          
          $dir = plugin_dir_path( __DIR__ );
          

          一级升级路径:

           /home/user/var/www/wordpress_site/wp-content/plugins/
          

          __DIR__ 魔术常量返回上一级目录路径。

          【讨论】:

            【解决方案10】:

            在插件的主 PHP 文件中,这仅适用于管理员:

            $plugin_data = get_plugin_data( __FILE__ );
            $plugin_name = $plugin_data['Name'];
            

            【讨论】:

              猜你喜欢
              • 2014-01-13
              • 1970-01-01
              • 2010-10-26
              • 1970-01-01
              • 2013-09-03
              • 2013-04-24
              • 2012-12-12
              • 2014-04-16
              相关资源
              最近更新 更多