限制可以在WordPress安装中安装的插件数量

时间:2018-01-23 作者:drabello

我知道这不是插件的数量,而是质量。但无论如何,我想限制WordPress安装中可以安装的插件数量。有什么想法吗?

这一限制是否适用于包括我在内的所有管理员并不重要。

3 个回复
SO网友:swissspidy

最有效的方法可能是map_meta_cap 有条件地不允许install_plugins 能力。没有与此相关的数据库调用。

以下是一个(未经测试)示例:

add_filter( \'map_meta_cap\', \'wpse291964_limit_plugins\', 10, 2 );

function wpse291964_limit_plugins( $caps, $cap ) {
  if ( \'install_plugins\' === $cap ) {
    $plugins = get_plugins();

    // Only allow 10 plugins to be installed.
    if ( count( $plugins ) > 10 ) {
      $caps[] = \'do_not_allow\';
    }
  }

  return $caps;
}
我建议你watch this video 作者:John Blackbourn了解更多map_meta_cap 还有朋友。

SO网友:iantsch

您可以进一步研究一些可能的解决方案,以限制安装插件的可能性。

WordPress将检查当前用户是否可以使用current_user_can(\'install_plugins\') 渲染之前Add New 按钮如果您创建一个mu插件来检查已安装的插件数量,那么您可以删除管理员的功能,并限制安装更多插件的可能性。

使用排队的JS脚本检查插件数量,并隐藏/删除按钮。这只是表面现象,如果用户知道安装程序的路径,插件仍然可以安装。

了解更多信息must use plugins

SO网友:Ben HartLenn

下面是如何检查已安装的插件数量,以及根据您设置的最大插件数量为管理员添加/删除install\\u插件功能的方法。正如@iantsch所提到的,这听起来像是一个必须使用的插件将是最好的地方。这将防止其他人从仪表板上搞乱插件,而且它总是这样。此外,它不会包含在我下面代码中已安装插件的数量中。您可以将其添加到主题函数中。php文件,但代码是特定于主题的,而不是特定于安装的。

add_action( \'admin_init\', \'yourprefix_limit_plugin_installations\' );
function yourprefix_limit_plugin_installations() {

    // get administrator role object
    $admin_role = get_role( \'administrator\' );

    // check if administrator role object exists... 
    if( $admin_role !== null ) {

        // ...get number of "installed" plugins(i.e. deactivated or activated) in your wp-content/plugins folder
        $number_of_plugins_installed = count( get_plugins() );

        // ...set number of installed plugins you want to have as a maximum
        $maximum_number_of_plugins = 29; // take your pick, 29 was just how many I had in my testing environment

        // ...if the number of plugins installed is equal to or more than $maximum_number_of_plugins integer...
        if( $number_of_plugins_installed >= $maximum_number_of_plugins ) {

            // ...remove install_plugins capability from all administrators
            $admin_role->remove_cap( \'install_plugins\' );
        }
        // ...else there are less plugins installed than set in $maximum_number_of_plugins...
        else {

            // ...so ensure all administrator users have the install_plugins capability(which is a default WordPress setting)
            $admin_role->add_cap( \'install_plugins\' );
        }
    }
}

结束