【发布时间】:2020-06-22 04:00:18
【问题描述】:
我正在尝试根据用户角色禁用特定插件(Woocommerce Pay per Post)。
我有三种类型的用户角色。
- 供应商
- 贡献者
- 管理员
我的目标是如果用户是 CONTRIBUTOR,则上述插件(Woocommerce Pay per Post)将被禁用。
ELSE(管理员和供应商),激活插件。
我已经写了这段代码:
// Disable Plugins to specific user
add_filter( 'option_active_plugins', 'disable_logged_in_plugin' );
function disable_logged_in_plugin( $plugins ) {
// The 'option_active_plugins' hook occurs before any user information get generated,
// so we need to require this file early to be able to check for logged in status
require (ABSPATH . WPINC . '/pluggable.php');
// If we are logged in, and NOT an admin...
if ( current_user_can('Contributor') ) {
// Use the plugin folder and main file name here.
// is used here as an example
$plugins_not_needed = array ('/woocommerce-pay-per-post/woocommerce-pay-per-post.php');
foreach ( $plugins_not_needed as $plugin ) {
$key = array_search( $plugin, $plugins );
if ( false !== $key ) {
unset( $plugins[ $key ] );
}
}
}
return $plugins;
}
问题是它不工作?分配给角色“贡献者”的用户仍然设法使用上述插件...
任何想法让它工作?感谢您在这方面的帮助。
这是该插件文件夹及其内容的屏幕截图。
【问题讨论】:
-
您能否确认
disable_logged_in_plugin确实在执行并且您为此使用了必须使用的插件? -
不,它没有执行。
-
您的代码存在一些问题,我开始编写响应,但后来我意识到我实际上并不确定您要做什么。默认情况下,这些角色的用户应该看不到插件列表,所以我认为您不是在尝试隐藏插件,对吧?相反,您不想使用它的功能吗?您现在要走的代码路径是全局路径。如果您更改
$plugins数组并返回它,它将被保存到数据库中,供所有人使用,包括管理员。你想把它隐藏在菜单中吗? -
@ChrisHaas,我修改了我的问题以描述我的目标。谢谢。
-
谢谢@BenDaggers。插件要么处于活动状态,要么不处于活动状态,实际上没有“条件活动模式”。所有插件都会通过调用
wp_get_active_and_valid_plugins很早就启动,这是一个不可过滤的调用,并且“取消启动”插件不是 WordPress 概念。相反,我真的认为您想限制对该插件功能的访问,对吧?