符号链接目录中的插件?

时间:2011-04-20 作者:Jan Fabry

当我开发插件时,我通过在不同的wp-content 目录。这很好,因为我只需编辑一次文件,但它打破了在插件中生成资源引用的一个重要结构:__FILE__ 指的是物理插件位置,而不是wp-content. 我应该如何解决这个问题?

我的目录结构如下所示:

  • /path/to/wordpress/development/dir/
    • plugin-development/
      • monkeyman-rewrite-analyzer/
        • monkeyman-rewrite-analyzer.php
        • js/
          • monkeyman-rewrite-analyzer.js
    • versions/
      • 3.1/
        • wp-content/
          • plugins/
            • monkeyman-rewrite-analyzer 作为上述插件的符号链接3.1-multi-dir/
              • wp-content/
                • plugins/
                  • monkeyman-rewrite-analyzer 作为上述插件的符号链接3.1-multi-domain/
                    • wp-content/
                      • plugins/
                        • monkeyman-rewrite-analyzer 作为上述插件的符号链接,如果要将Javascript文件排队,应使用plugins_url( \'monkeyman-rewrite-analyzer.js\', [base file] ), 但使用__FILE__ 此处不起作用,因为实际的文件路径将是/path/to/wordpress/development/dir/plugin-development/monkeyman-rewrite-analyzer/monkeyman-rewrite-analyzer.php, 不/path/to/wordpress/development/dir/versions/*/wp-content/plugins/monkeyman-rewrite-analyzer/monkeyman-rewrite-analyzer.php, 因此WordPress无法删除第一部分并生成相对于WordPress安装的URL。

4 个回复
SO网友:scribu

这个问题可以通过挂接到plugins_url 滤器

它无法处理所有其他情况plugin_basename() 使用,例如register_activation_hook() 和公司。

更多信息:http://core.trac.wordpress.org/ticket/16953

SO网友:Jan Fabry

我目前使用了一个技巧来获取WordPress的相对文件位置:wp_get_active_and_valid_plugins() 返回文件路径,并wp_settings.php loops over them and includes the files. 所以全球$plugin 变量将引用您当前的插件(当然,只有在加载插件时,我才会将其保存在带前缀的全局变量中):

$monkeyman_Rewrite_Analyzer_file = $plugin;
因为插件也可以作为必须使用的或网络插件加载these loops use other variable names, 完整的代码如下所示:

$monkeyman_Rewrite_Analyzer_file = __FILE__;
if ( isset( $mu_plugin ) ) {
    $monkeyman_Rewrite_Analyzer_file = $mu_plugin;
}
if ( isset( $network_plugin ) ) {
    $monkeyman_Rewrite_Analyzer_file = $network_plugin;
}
if ( isset( $plugin ) ) {
    $monkeyman_Rewrite_Analyzer_file = $plugin;
}
后备方案仍然是__FILE__, 因此,如果将来有人更改循环变量名称,我的代码应该仍然适用于99%的安装,只有我的开发设置会失败,我可以轻松发布新版本。

SO网友:fuxia

中的注释bug 46260 建议使用$_SERVER["SCRIPT_FILENAME"] 而不是__FILE__. 这有用吗?

SO网友:Chad Furman

$_SERVER["SCRIPT_FILENAME"] 如果你使用得当,它就会起作用。您只需使用它来设置基本路径,然后使用相对于该基本路径的路径包含文件。

类似于:

$plugin_dir = dirname($_SERVER["SCRIPT_FILENAME"]);
$myFile = $plugin_dir."/includes/js/myJavascriptFile.js";
请注意,当您无法访问wp blog header时,这更有用。php(即在处理基于ajax的表单请求时)

结束

相关推荐