获取其他插件的路径


10

要获得插件的路径,可以使用plugin_dir_path(__FILE__)-但这显然必须从插件内部调用。

如何从插件A中可靠地获取插件B(pluginb/pluginb.php)的路径?

编辑:假设您知道所追求的插件的特性(实际上您可以从中获取它们get_plugins())。但我希望它能正常工作。


这适用于任何插件吗?还是一个/几个?如果是后者,它们是您自己的还是公开发布的?
TheDeadMedic 2012年

因此,我假设您知道所追求的插件的特性:例如pluginb/pluginb.php,但是是第三方。
史蒂芬·哈里斯

Answers:


9

我最好的猜测是:

if ( ! is_file( $dir = WPMU_PLUGIN_DIR . '/pluginb/pluginb.php' ) ) {
    if ( ! is_file( $dir = WP_PLUGIN_DIR . '/pluginb/pluginb.php' ) )
        $dir = null;
}

return $dir;

但是,这里的危险仍然是插件的“基本名称”的假设-精心编写的插件即使其目录和/或主文件已被重命名(无论出于何种原因)仍将起作用。

这又回到我原来的评论-这取决于哪个第三方插件这指的是,许多作者定义自己的方法/常量来保存插件路径-这将是有意义的检查自己的存在和使用这些替代(如果可用)。


好的,我已经更新了问题:)。您可以从这里获得插件,get_plugins()在我的用例中就足够了。如果您正在寻找某些特定的插件,但没有更好的选择,我想您可以通过中的名称搜索该插件get_plugins()
史蒂芬·哈里斯

+1理想情况下希望避免使用常量-但此解决方案至少会在使用它们时进行检查:)-这就是核心似乎在做事情的方式。
史蒂芬·哈里斯

2

因此,一种方法是plugin_dir_path()在当前插件中调用,并将您自己的插件目录名称替换为您在(pluginb/pluginb.php)之后插入的插件的名称:

因此,在我们的插件中plugina/plugina.php

$plugin_b = str_replace('plugina/','pluginb/pluginb.php',plugin_dir_path(__FILE__));
echo $plugin_b; //Prints path/to/pluginb/pluginb.php';

我不建议这样做,因为假设插件B与A在同一目录中(ala MU插件不一定是这种情况)。
TheDeadMedic 2012年

谢谢,以为会有一些我想念的东西:)
斯蒂芬·哈里斯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.