您将如何要求并自动下载依赖插件?

时间:2011-08-02 作者:Manny Fleurmond

我想知道是否有一个类或编程技术可以让我检查特定插件的安装和激活,如果没有安装插件,可以从WordPress的插件库下载它?

我有一个插件,我想要求scribu的Post 2 Post插件,我想知道怎么做?

3 个回复
最合适的回答,由SO网友:EAMann 整理而成

我会鼓励你不要这样做,但我理解你想做什么,我自己也会做类似的事情。

我是如何做的,我构建了依赖于插件的主题,依赖于插件的插件,以及依赖于依赖于其他插件的插件的插件。如果我控制着开发的两面,我会把事情分成两部分。。。

在插件中,其他东西需要它:

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\' );
然后我加上一个明亮的“;请安装我的超级酷插件;注意,在管理屏幕的顶部有一个指向下载页面的链接。

这为我提供了一种可靠的方法来检查我的依赖项是否存在并已安装。如果插件已安装但未激活,则仍会显示警告。

另一种方式@tollmanz已经推荐了另一种选择。我不会复制粘贴他的解决方案,但检查依赖插件的核心功能是否存在是确保它存在的一个好方法。

同样,如果插件已安装但处于非活动状态,此路由将仅检测其是否处于活动状态。

为什么我这样做首先,我不喜欢其他人的工具把多余的东西下载到我的网站上。所以我不会把这种模式强加给其他用户。相反,我会提示他们下载额外的代码并将其指向正确的方向。一种更简洁的方法是与自动安装程序配合,这样他们只需单击一下就可以下拉插件。

此外,我的代码的一些用户所在的服务器无法使用一键式安装程序(或自动下载)。他们必须通过FTP插件来安装,所以一个无声的下载和激活依赖系统根本无法工作。

最后,如果您使用的是其他人的代码,您对他们何时发布新版本、是否引入错误或if they\'re hacked. 所以,不要自动安装您不能声称对其负责的代码。

SO网友:tollmanz

我处理类似情况的方法是在插件依赖项中查找核心类或函数,并检查它是否存在。例如,我构建了一个依赖于简单术语元插件的插件。我使用以下方式进行检查:

if(!function_exists(\'simple_term_meta_install\'))
{
    // Do stuff to download plugin
}
在我的插件中,我只是将插件与插件打包在一起。我只会在尚未安装的情况下运行它。

您的另一个选择是提示用户下载插件并安装。

就如何自动下载而言。。。我不知道。我想看看WP核心是如何管理这一点的,并试图从内置系统中收集一些知识。

SO网友:livearoha

按照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\\u-loaded操作。这个network_admin_url() 将返回正确的URL,无论您的站点是否设置为多站点。

结束