如何针对特定用户角色停用WordPress TeraWallet插件?现有代码无效
原代码核心问题
- 核心逻辑错误:
deactivate_plugins()/activate_plugins()是全局修改站点插件启用状态的函数,不是针对单个用户禁用加载,只要有符合条件的用户访问站点,所有用户的插件都会被停用,完全不符合需求。 - 插件路径错误:传入的路径开头多了斜杠,WordPress识别插件路径不需要开头的
/,会导致函数找不到对应插件。 - 覆盖场景不全:原代码仅判断了customer角色,管理员、编辑等其他非订阅者角色还是可以使用插件,不符合「仅允许订阅者使用」的要求。
- 钩子覆盖范围有限:
admin_init仅在后台触发,前台页面插件仍会正常加载给所有用户。
修复方案
使用option_active_plugins过滤器动态修改当前用户的插件加载列表,不会修改全局插件状态,同时覆盖前台、后台所有场景。
操作步骤
- 先删除你之前添加到functions.php里的旧代码,手动到WordPress后台插件管理页重新启用TeraWallet插件,确保全局状态为启用。
- 将以下代码添加到当前主题的functions.php文件末尾即可:
add_filter('option_active_plugins', 'restrict_terawallet_to_subscribers_only'); function restrict_terawallet_to_subscribers_only($plugins) { // 未登录用户直接禁用 if (!is_user_logged_in()) { $key = array_search('woo-wallet/woo-wallet.php', $plugins); if ($key !== false) { unset($plugins[$key]); } return $plugins; } $current_user = wp_get_current_user(); // 仅订阅者角色允许使用,其他角色全部禁用 if (!in_array('subscriber', $current_user->roles)) { $key = array_search('woo-wallet/woo-wallet.php', $plugins); if ($key !== false) { unset($plugins[$key]); } } return $plugins; }
代码说明
- 未登录用户直接不加载TeraWallet插件
- 已登录用户如果不是订阅者角色,也不加载该插件
- 仅订阅者角色可以正常加载使用插件,完全匹配需求
- 动态修改插件加载列表,不会修改全局插件启用状态,不会影响其他用户的使用
内容的提问来源于stack exchange,提问作者FencyWeb
相关产品推荐
相关产品推荐

