阻止多站点站点使用插件

时间:2015-12-14 作者:user1889580

我有一个自定义插件,我写了很多东西来管理。我想将此用于主网站。com。我不想要任何子域网站,例如网站。com/site1访问此插件。我正在考虑在插件本身中实现一些东西,这样它就可以检查URL,如果不是主网站,它就不会做任何事情,但这不是我真正想要的。我想对所有子网站完全隐藏这个插件。我计划在将来拥有多个插件,所以我希望能够控制哪些子站点可以访问特定的插件。

进一步澄清。我不想给人们选择,我想决定子网站有什么选择。我有一个我不喜欢的肮脏的解决方案。

if(get_site_url() != "http://website.com") exit;
当插件安装在主站点以外的任何地方时,这将导致致命的异常,但它确实很难看。我想要一个更干净的方式来隐藏这个插件从插件菜单的子网站。

2 个回复
SO网友:jdm2112

默认情况下,Multisite设置为执行此操作。如果您只需安装插件而不“网络激活”它,则可以将其使用限制在网络中的任何单个站点。

为此,您必须使用具有超级管理员权限的帐户登录。在单站点仪表板>插件上安装插件;不是从网络管理插件页面。

https://codex.wordpress.org/Multisite_Network_Administration#Plugins

有关完整的详细信息,请参阅特定于现场的部分。

SO网友:kovshenin

您可以筛选active_plugins 选项并删除您希望永远不会在站点上启用的插件。但是,您必须使用mu插件(wp内容/mu插件),因为从常规插件中筛选选项太晚了:

add_filter( \'option_active_plugins\', function( $plugins ) {
    if ( get_current_blog_id() !== 1 ) {
        $plugin = \'plugin-name/plugin-name.php\';
        $key = array_search( $plugin, $plugins );
        if ( $key !== false ) {
            unset( $plugins[ $key ] );
        }
    }

    return $plugins;
});
注意我是如何使用get_current_blog_id() 如果您决定将HTTPS添加到主站点或更改域名,请单击此处以确保逻辑不会中断。

然后,您可能希望从用户看到的列表中删除插件,这样他们就不会感到困惑,因为当他们点击激活链接时不会发生任何事情:

add_filter( \'all_plugins\', function( $plugins ) {
    if ( get_current_blog_id() !== 1 ) {
        $plugin = \'plugin-name/plugin-name.php\';
        unset( $plugins[ $plugin ] );
    }

    return $plugins;
});
另一种方法是让您的插件成为mu插件,即在整个网络上强制且始终处于活动状态,然后在主插件文件中简单地:

if ( get_current_blog_id() !== 1 )
    return; // Don\'t execute the rest of this file

// Your plugin stuff goes here
因此,该文件将在网络中的所有站点上进行解析,但执行将立即返回。

希望有帮助!

相关推荐

Remove node from multisites?

我有一个如下所示的功能,其目标是从“我的网站”下拉列表中删除新帖子并管理评论。如果我将{$node\\u id}替换为blogs id,这会很好地工作。但我希望这适用于“我的站点”列表中的所有多站点。这意味着我需要获得所有的博客id。这是我已经取得的成就,但它不起作用。add_action( \'admin_bar_menu\', \'remove_nodes_from_mysites\', 999 ); function remove_nodes_from_mysites( $wp_admin_