删除非管理员用户的批量操作

时间:2019-01-24 作者:Houssem Ghozzi

我想删除非管理员用户的批量操作(具体来说是店铺经理),所以我得到了这段代码,可以删除所有用户的批量操作。

add_filter( \'bulk_actions-edit-shop_order\', \'__return_empty_array\', 100 );
如何使其仅适用于“店铺经理”角色用户?

我也试过了this, 但它没有起作用。

谢谢

2 个回复
最合适的回答,由SO网友:Shawn W 整理而成

以下是如何为任何用户(不是管理员)删除批量操作。

add_action( \'wp_loaded\', \'my_remove_bulk_actions\' );
function my_remove_bulk_actions() {
if ( ! is_admin() )
   return;

if ( ! current_user_can( \'administrator\' ) ) {
  add_filter( \'bulk_actions-edit-shop_order\', \'__return_empty_array\', 100 );

 }
}
如果您想只针对店铺经理,可以编辑If语句

if ( ! current_user_can( \'administrator\' ) )

if ( current_user_can( \'shop_manager\' ) )

发布时测试并使用最新版本的WordPress 5.0.3。

SO网友:Kashif Rafique

根据Codex:

虽然部分支持针对特定角色而不是功能进行检查,但不鼓励这种做法,因为它可能会产生不可靠的结果。

它还指出:

将角色名称传递给current_user_can() 不鼓励这样做,因为这不能保证正常工作(请参阅#22624).

因此current_user_can() 不应用于检查用户的角色。它应该用于检查用户是否具有特定的功能。

您可以更改Shawn w 代码如下:

// for all the non-admin roles
if ( ! current_user_can( \'manage_options\' ) ) { ...

// just for the Shope Manager role
if ( ! current_user_can( \'manage_options\' ) && current_user_can( \'manage_woocommerce\' ) ) { ...

相关推荐