仅允许在多站点的根站点上激活插件

时间:2011-11-22 作者:Scott

我正在开发wordpress file monitor plus 插件。

它的目的是扫描修改过的文件,对于WP的单个安装来说效果很好。但是,当您查看多站点时,并不希望在所有子站点上启用它,因为它们都共享相同的文件,而且(老实说)只有网络管理员才希望收到文件更改通知。

所以我的问题是:

我将如何编程,使其仅允许从多站点安装的根站点安装/运行?所以:这意味着不允许网络安装,只允许从根博客激活。

有人知道我怎样才能做到这一点吗?

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

您可以检查常量SITE_ID_CURRENT_SITE 匹配项get_current_site()->id. 以下为激活操作。在运行期间,您必须再次检查它。

register_activation_hook( __FILE__, \'force_main_site_installation\' );

function force_main_site_installation()
{
    if ( defined( \'SITE_ID_CURRENT_SITE\' )
        and SITE_ID_CURRENT_SITE !== get_current_site()->id 
    )
    {
        if ( function_exists(\'deactivate_plugins\') )
        {
            deactivate_plugins( __FILE__ );
        }
        die( \'Install this plugin on the main site only.\' );
    }
}

SO网友:kaiser

第一the explanation for the uninstall/activation/deactivation hooks.

第二:检查is_blog_installed( $blog_ID ); 然后调查所有get_blog_whatever(); 并获取\\u blogaddress\\u whatever();`函数(我猜您使用phpstorm作为IDE,所以应该可以使用函数的自动完成)。

Edit: 您还可以尝试通过向注册管理页面来限制可用菜单network_admin_menu() (仅在以下情况下触发is_network_admin()), user_admin_menu(); (仅在以下情况下触发is_user_admin()) 而不是admin_menu();.

SO网友:T.Todua

只有此解决方案对我有效:

register_activation_hook( __FILE__,  function () {
    if ( is_multisite() && ! strpos( $_SERVER[\'REQUEST_URI\'], \'wp-admin/network/plugins.php\' ) ) {
        die ( __( \'<script>alert("Activate this plugin only from the NETWORK DASHBOARD.");</script>\') );
    }
    // ...............
});

结束

相关推荐

Transients API and multisite

我们正在使用Atlas HTML站点地图插件,该插件使用transients API缓存站点地图,调用如下:set_transient( \'dmac_html_sitemap\', $output, 60*60*24*7 ); 现在,我们还有一个多站点设置,我想知道瞬态存储在哪里,WP multisite是否将它们分开。它将选项分开,因为每个站点(博客)都有自己的DB表前缀(例如wp\\U 29\\U选项)。我在某个地方读到,瞬态可以用memcached存储,所以我猜后端存储是可插入的。这个问