【问题标题】:Remove 'Move to Trash' under woocommerce order action for shop manager在商店经理的 woocommerce 订单操作下删除“移至垃圾箱”
【发布时间】:2021-11-21 08:53:07
【问题描述】:
根据这篇帖子custom post type, hide or disable the trash button in publish meta box,这是专门为帖子删除的。在 woocommerce 订单操作下,我找不到与删除“移至垃圾箱”相关的任何帖子解决方案。此代码是否同样适用于在 woocommerce 上删除此按钮?
function my_custom_admin_styles() {
?>
<style type="text/css">
.post-type-inhoud form #delete-action{
display:none;
}
</style>
<?php
}
add_action('admin_head', 'my_custom_admin_styles');
如何将其应用于 woocommerce 删除订单操作下的“移至垃圾箱”按钮,并且仅适用于商店经理。
【问题讨论】:
标签:
css
function
woocommerce
【解决方案1】:
防止删除帖子/订单/自定义帖子是每个用户角色的能力。要防止 shop_manager 角色删除订单,您必须删除该功能。所有其他解决方案都将在视觉上起作用,但知道他的东西的人仍然可以根据需要删除订单。所以将以下函数放在你的functions.php中
function wp23958_remove_shop_manager_capabilities() {
$shop_manager = get_role( 'shop_manager' ); // Target user role
//List of capabilities which we want to edit
$caps = array(
'delete_shop_orders',
'delete_private_shop_orders',
'delete_published_shop_orders',
'delete_others_shop_orders',
);
// Remove capabilities from our list
foreach ( $caps as $cap ) {
$shop_manager->remove_cap( $cap );
}
}
add_action( 'init', 'wp23958_remove_shop_manager_capabilities' );
奖励如何知道当前用户有什么能力
function wp32985_check_user_capabilities() {
$data = get_userdata( get_current_user_id() );
if ( is_object( $data) ) {
$current_user_caps = $data->allcaps;
// print it to the screen
echo '<pre>' . print_r( $current_user_caps, true ) . '</pre>';
}
}
add_action( 'init', 'wp32985_check_user_capabilities' );
【解决方案2】:
要定位的正确 CSS 类是:.order_actions li #delete-action
以下将为所有后端用户(管理员、商店经理等)隐藏它:
add_action( 'admin_head', 'bbloomer_css_wp_admin' );
function bbloomer_css_wp_admin() {
echo '<style>.order_actions li #delete-action { display: none; }</style>';
}
如果您只想将此 CSS 应用于商店经理(因此不适用于管理员),您需要条件逻辑,特别是您需要使用内置的 WooCommerce 函数 wc_current_user_has_role():
add_action( 'admin_head', 'bbloomer_css_wp_admin' );
function bbloomer_css_wp_admin() {
if ( ! wc_current_user_has_role( 'shop_manager' ) ) return;
echo '<style>.order_actions li #delete-action { display: none; }</style>';
}