问题描述
想知道是否有类或编程技术,允许我检查特定插件的安装和激活,如果没有安装插件,请从 WordPress 的插件库中下载?
我有一个插件,我想要 scribu 的 Post 2 Post 插件,我想知道如何做到这一点?
最佳解决方案
我会鼓励反对这个,但我明白你想做什么,做一些类似的事情。
我怎么做
我构建依赖于插件的插件,依赖于插件的插件和依赖于其他插件的插件的插件。如果我控制发展的双方,我做两件事情
在其他东西需要的插件中:
add_filter( 'my-cool-plugin-name-installed', '__return_true' );
在需要其他插件的插件/主题中:
if ( ! apply_filters( 'my-cool-plugin-name-installed', false ) )
add_action( 'admin_notices', 'my-cool-plugin-name_not_installed' );
然后,我添加一个明亮的 「请安装我的 super-cool 插件」 通知到管理屏幕的顶部与链接到下载页面。
这给了我一个确定的方式来检查我的依赖项是否存在并被安装。如果插件已安装但未激活,警告仍然显示。
其他方式
@tollmanz 已经推荐了另一个选项。我不会 copy-paste 他的解决方案,但检查您的依赖插件的核心功能的存在是一个伟大的方式来确保它在那里。
再次,如果插件安装但不活动,则此路由将仅检测其是否处于活动状态。
为什么我这样做
首先,我不喜欢别人的工具下载额外的东西到我的网站。所以我不强迫这个范例给其他用户。相反,我提示他们下载额外的代码,并将它们指向正确的方向。更简单的方法是与自动化安装程序配合使用,以便他们可以通过单击来拉下插件。
此外,我的代码的几个用户在服务器上,他们无法使用 one-click 安装程序 (或自动下载) 。他们必须安装 FTP 插件,所以无声的 download-and-activate-a-dependency 系统根本无法工作。
最后,如果你正在使用别人的代码,那么当他们发布新版本 (如果它们引入了错误) 或 if they’re hacked 时,你可以对它们进行 0 控制。所以不要自动安装你不能声明责任的代码。
次佳解决方案
处理类似情况的方法是在插件依赖关系中查找核心类或函数,并检查它是否存在。例如,我构建了一个依赖于简单术语元插件的插件。我检查了它使用:
if(!function_exists('simple_term_meta_install'))
{
// Do stuff to download plugin
}
在我的插件中,我只是用插件打包了这个插件。我只会运行它,如果它还没有安装。
您的其他选项将是提示用户下载插件并进行安装。
关于如何自动下载… 我不知道。我会看看 WP 核心如何管理这个,并尝试从内置系统中收集一些知识。
第三种解决方案
关于 EAMann 的通知想法,您可以在管理员通知中添加一个链接,该链接将管理员添加到添加插件中的搜索结果页面。由于指定的名称是其结果中首先列出的确切名称。所有需要的是单击立即安装链接。
function posts_2_posts_required() {
$url = network_admin_url( 'plugin-install.php?tab=search&type=term&s=Posts+2+Posts&plugin-search-input=Search+Plugins' );
echo '
<div class="error">
<p>The <a href="' . $url . '">Posts 2 Posts Plugin</a> is required.</p>
</div>
';
}
function check_required_plugins() {
if ( current_user_can( 'activate_plugins' ) ) {
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if ( ! is_plugin_active( 'posts-2-posts/posts-2-posts.php' ) )
add_action( 'admin_notices', 'posts_2_posts_required' );
}
}
add_action( 'plugins_loaded', 'check_required_plugins' );
要访问 current_user_can(),您需要等待插件加载,因此 plugins_loaded 操作。无论您的站点是否设置为多站点,network_admin_url()将返回正确的 URL 。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。