从 WooCommerce 订阅仪表板中删除特定用户角色的操作按钮
Remove action buttons from WooCommerce Subscriptions dashboard for a specific user role
我希望使用虚拟助手来帮助管理支持票。该虚拟助手需要对 WooCommerce 的有限区域具有阅读权限(订阅)。
我正在使用“用户角色编辑器”删除所有不需要的功能。不幸的是,单个功能 (edit_shop_orders) 允许访问我不希望代理访问的功能。我被迫授予代理此权限以访问后端的订阅菜单。
我想做什么:
删除特定用户角色的 'Suspend' 和 'Cancel' 按钮访问权限 (va_support)
我当前的代码(不工作):
function change_va_support_role(){
global $wp_roles;
$wp_roles->remove_cap( 'va_support', 'suspend_subscriptions' );
$wp_roles->remove_cap( 'va_support', 'cancel_subscriptions' );
}
add_action('init', 'change_va_support_role');
我假设我输入了错误的功能,但我似乎无法在任何地方找到它们。
我知道 我可以很容易地用 CSS 隐藏这些按钮,但这只能被逆转并且不会依赖于用户角色。如果有的话,我愿意以另一种方式解决这个问题!
截至目前,处理此操作触发器的地方没有过滤器。您可以自己添加一个过滤器来处理这个问题。
/woocommerce-subscriptions/includes/admin/class-wcs-admin-post-types.php 在第 330 行附近的函数内 - public function parse_bulk_actions()
/*
* Use below hook for handling custom user role permission for action from subscription listing page
*/
$can_change_status = apply_filters('wcs_can_change_subscription_status', true, $subscription_ids);
if(!$can_change_status){
return;
}
在主题中,您可以检查当前用户是否具有相应的角色,然后return true/false。您可能知道更新插件时,所做的更改将会丢失。但是就检查代码而言,在触发这些函数之前没有过滤器。
add_filter( 'wcs_can_change_subscription_status', 'alter_can_change_subscription_status' );
function alter_can_change_subscription_status( $can_change_status ) {
$user = wp_get_current_user();
if ( in_array( 'va_support', (array) $user->roles ) ) {
//The user has the "va_support" role
return false;
}
return $can_change_status;
}
使用 Javascript / jQuery 以下内容将删除所有 "hovered" 操作按钮,针对特定用户角色,在订阅管理仪表板上的状态列中:
add_action( 'admin_footer', 'admin_dashboard_subscriptions_filter_callback' );
function admin_dashboard_subscriptions_filter_callback() {
global $pagenow, $post_type;
$targeted_user_role = 'va_support'; // <== Your defined user role slug
// Targeting subscriptions admin dashboard for specific user role
if( $pagenow === 'edit.php' && $post_type === 'shop_subscription'
&& current_user_can( $targeted_user_role ) ) :
?>
<script>
jQuery(function($){
$('td.column-status > div.row-actions').each(function() {
$(this).remove();
});
});
</script>
<?php
endif;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
我希望使用虚拟助手来帮助管理支持票。该虚拟助手需要对 WooCommerce 的有限区域具有阅读权限(订阅)。
我正在使用“用户角色编辑器”删除所有不需要的功能。不幸的是,单个功能 (edit_shop_orders) 允许访问我不希望代理访问的功能。我被迫授予代理此权限以访问后端的订阅菜单。
我想做什么:
删除特定用户角色的 'Suspend' 和 'Cancel' 按钮访问权限 (va_support)
我当前的代码(不工作):
function change_va_support_role(){
global $wp_roles;
$wp_roles->remove_cap( 'va_support', 'suspend_subscriptions' );
$wp_roles->remove_cap( 'va_support', 'cancel_subscriptions' );
}
add_action('init', 'change_va_support_role');
我假设我输入了错误的功能,但我似乎无法在任何地方找到它们。
我知道 我可以很容易地用 CSS 隐藏这些按钮,但这只能被逆转并且不会依赖于用户角色。如果有的话,我愿意以另一种方式解决这个问题!
截至目前,处理此操作触发器的地方没有过滤器。您可以自己添加一个过滤器来处理这个问题。
/woocommerce-subscriptions/includes/admin/class-wcs-admin-post-types.php 在第 330 行附近的函数内 - public function parse_bulk_actions()
/*
* Use below hook for handling custom user role permission for action from subscription listing page
*/
$can_change_status = apply_filters('wcs_can_change_subscription_status', true, $subscription_ids);
if(!$can_change_status){
return;
}
在主题中,您可以检查当前用户是否具有相应的角色,然后return true/false。您可能知道更新插件时,所做的更改将会丢失。但是就检查代码而言,在触发这些函数之前没有过滤器。
add_filter( 'wcs_can_change_subscription_status', 'alter_can_change_subscription_status' );
function alter_can_change_subscription_status( $can_change_status ) {
$user = wp_get_current_user();
if ( in_array( 'va_support', (array) $user->roles ) ) {
//The user has the "va_support" role
return false;
}
return $can_change_status;
}
使用 Javascript / jQuery 以下内容将删除所有 "hovered" 操作按钮,针对特定用户角色,在订阅管理仪表板上的状态列中:
add_action( 'admin_footer', 'admin_dashboard_subscriptions_filter_callback' );
function admin_dashboard_subscriptions_filter_callback() {
global $pagenow, $post_type;
$targeted_user_role = 'va_support'; // <== Your defined user role slug
// Targeting subscriptions admin dashboard for specific user role
if( $pagenow === 'edit.php' && $post_type === 'shop_subscription'
&& current_user_can( $targeted_user_role ) ) :
?>
<script>
jQuery(function($){
$('td.column-status > div.row-actions').each(function() {
$(this).remove();
});
});
</script>
<?php
endif;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。