Php 从特定用户角色的电子商务订阅仪表板中删除操作按钮
我正在寻找一个虚拟助手来帮助管理支持票证。此虚拟助理需要对有限的商业领域(订阅)具有读取权限 我正在使用“用户角色编辑器”删除所有不需要的功能。不幸的是,只有一个功能(编辑车间订单)可以访问我不希望代理访问的功能。我被迫赋予代理访问后端订阅菜单的能力Php 从特定用户角色的电子商务订阅仪表板中删除操作按钮,php,wordpress,woocommerce,admin,woocommerce-subscriptions,Php,Wordpress,Woocommerce,Admin,Woocommerce Subscriptions,我正在寻找一个虚拟助手来帮助管理支持票证。此虚拟助理需要对有限的商业领域(订阅)具有读取权限 我正在使用“用户角色编辑器”删除所有不需要的功能。不幸的是,只有一个功能(编辑车间订单)可以访问我不希望代理访问的功能。我被迫赋予代理访问后端订阅菜单的能力 我想做什么: function change_va_support_role(){ global $wp_roles; $wp_roles->remove_cap( 'va_support', 'suspend_subscr
我想做什么:
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');
从特定用户角色中删除“挂起”和“取消”按钮访问权限(va_支持)
我的当前代码(不工作):
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行附近-
公共函数parse\u bulk\u actions()
在主题中,您可以检查当前用户是否具有角色,然后相应地返回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,以下操作将从状态列中删除订阅管理仪表板上特定用户角色的所有“悬停”操作按钮:
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;
}
add_操作('admin_footer'、'admin_dashboard\u subscriptions\u filter\u callback');
函数管理\仪表板\订阅\过滤器\回调(){
全局$pagenow,$post_类型;
$targeted_user_role='va_support';//
jQuery(函数($){
$('td.column-status>div.row-actions')。每个(函数(){
$(this.remove();
});
});
您好,谢谢您的输入!我刚刚测试了您的代码,将其放在“public function parse_bulk_actions()下”“。然后我在“用户角色编辑器”中添加了“can_change_status”作为自定义功能,并未选中它。不幸的是,我没有看到任何更改!我做错了什么吗?@cactusboat-在functions.phpHey@mujuonly中添加第二个代码段,我刚刚尝试过,但似乎仍然不起作用:(非常感谢你花时间回答我的问题!@cactusboat-如果过滤器功能正常,请尝试在开始时返回false。然后你可以确认问题是角色检查,否则问题是文件中添加的代码的位置。在第一个代码中,我将true替换为false,但没有正在重新定位。我还尝试在“public function parse_bulk_actions()”中重新定位。没有任何更改,VA支持仍然可以看到cancel/SuspendAzing,非常有效!感谢您抽出时间回答。如果在不久的将来我需要更大项目的帮助,我将联系:-(ps我不能再给您19小时的奖金)这将只隐藏操作链接。如果有人直接访问该链接,它将起作用:)不能说我会在紧要关头犹豫使用这个解决方案,但这是一种欺骗;@CKMacLeod有时欺骗总比没有强:)嗨@LoicTheAztec我试图通过你个人资料中的“联系我”链接与你联系,不确定你是否收到了我的消息?