从 WooCommerce 管理设置中删除特定选项卡
Remove specific tabs in from WooCommerce admin settings
我希望特定用户只能看到 WooCommerce -> 设置 -> 发货菜单。我设法删除了其他选项卡,例如产品、付款等,但坚持以下两件我想完成的事情:
- 删除 WooCommerce 设置中的 "GENERAL" 选项卡。
- 从插件中删除 "ORDER STATUSES" 选项卡。 (注意:这不完全是一个选项卡,slug 是
'edit.php?post_type=wc_order_status')
当我尝试删除“常规”选项卡时,它删除了整个“设置”菜单。至于 'Order Statuses',我的代码就是行不通。
add_filter( 'woocommerce_settings_tabs_array', 'remove_woocommerce_setting_tabs', 200, 1 );
function remove_woocommerce_setting_tabs( $array ) {
global $current_user;
//Declare the tabs we want to hide
$tabs_to_hide = array(
'general' => 'General', //this one removes the entire Settings menu
'wc_order_status' => 'Order Statuses'// this doesn't work, maybe bc it's a post_type
);
// Remove tab if user role is shipping_manager
if ( in_array("shipping_manager", $$current_user->roles) ) {
$array = array_diff_key($array, $tabs_to_hide);
}
}
我也试过下面的代码来删除 ORDER STATUSES 选项卡,但仍然没有成功:
add_action( 'admin_menu', 'remove_order_statuses_tab', 999);
function remove_order_statuses_tab()
{
global $current_user;
if ( in_array("shipping_manager", $current_user->roles) ) {
remove_menu_page( 'edit.php?post_type=wc_order_status' ); //not working either
}
}
add_filter( 'woocommerce_settings_tabs_array', 'remove_woocommerce_setting_tabs', 200, 1 );
function remove_woocommerce_setting_tabs( $array ) {
global $current_user;
// Remove tab if user role is shipping_manager
if ( in_array( "shipping_manager", $current_user->roles ) ) {
unset( $array[ 'general' ] );
?>
<script>
document.querySelector("[href='<?php echo esc_url( admin_url( 'edit.php?post_type=wc_order_status' ) ); ?>']").style.display = 'none';
</script>
<?php
}
return $array;
}
试试这个代码片段
要使用的正确挂钩是 woocommerce_settings_tabs_array
。
首先您需要找到您需要从代码中的选项卡数组中删除的数组键。
为此,您将首先使用以下函数,该函数将在 Admin WooCommerce 设置中显示所有数组数据(仅用于测试,将被删除):
add_filter( 'woocommerce_settings_tabs_array', 'filter_wc_settings_tabs_array', 990, 1 );
function filter_wc_settings_tabs_array( $tabs_array ) {
// Display raw array data
echo '<pre>'; print_r( $tabs_array ); echo '</pre>';
return $tabs_array;
}
它将显示类似 (包含所有必需的数组键):
现在你可以得到你需要的数组键slugs,删除相应的选项卡设置。所以现在您将能够为您找到正确的数组键 slug 第三方插件 WooCommerce 设置选项卡,您将在下面的功能代码中使用它。
要针对特定用户角色,您可以使用 global $current_user; $current_user->角色;或 Wordpress 专用函数 current_user_can()
…
因此,将删除用户角色的特定设置选项卡的工作代码是:
add_filter( 'woocommerce_settings_tabs_array', 'filter_wc_settings_tabs_array', 200, 1 );
function filter_wc_settings_tabs_array( $tabs_array ) {
// Only for "shipping_manager" user role
if( current_user_can( 'shipping_manager' ) ) {
// Remove some specific tabs
unset( $tabs_array['general'], $tabs_array['order_status'] ); // <== replace 'order_status' by
}
return $tabs_array;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
我希望特定用户只能看到 WooCommerce -> 设置 -> 发货菜单。我设法删除了其他选项卡,例如产品、付款等,但坚持以下两件我想完成的事情:
- 删除 WooCommerce 设置中的 "GENERAL" 选项卡。
- 从插件中删除 "ORDER STATUSES" 选项卡。 (注意:这不完全是一个选项卡,slug 是 'edit.php?post_type=wc_order_status')
当我尝试删除“常规”选项卡时,它删除了整个“设置”菜单。至于 'Order Statuses',我的代码就是行不通。
add_filter( 'woocommerce_settings_tabs_array', 'remove_woocommerce_setting_tabs', 200, 1 );
function remove_woocommerce_setting_tabs( $array ) {
global $current_user;
//Declare the tabs we want to hide
$tabs_to_hide = array(
'general' => 'General', //this one removes the entire Settings menu
'wc_order_status' => 'Order Statuses'// this doesn't work, maybe bc it's a post_type
);
// Remove tab if user role is shipping_manager
if ( in_array("shipping_manager", $$current_user->roles) ) {
$array = array_diff_key($array, $tabs_to_hide);
}
}
我也试过下面的代码来删除 ORDER STATUSES 选项卡,但仍然没有成功:
add_action( 'admin_menu', 'remove_order_statuses_tab', 999);
function remove_order_statuses_tab()
{
global $current_user;
if ( in_array("shipping_manager", $current_user->roles) ) {
remove_menu_page( 'edit.php?post_type=wc_order_status' ); //not working either
}
}
add_filter( 'woocommerce_settings_tabs_array', 'remove_woocommerce_setting_tabs', 200, 1 );
function remove_woocommerce_setting_tabs( $array ) {
global $current_user;
// Remove tab if user role is shipping_manager
if ( in_array( "shipping_manager", $current_user->roles ) ) {
unset( $array[ 'general' ] );
?>
<script>
document.querySelector("[href='<?php echo esc_url( admin_url( 'edit.php?post_type=wc_order_status' ) ); ?>']").style.display = 'none';
</script>
<?php
}
return $array;
}
试试这个代码片段
要使用的正确挂钩是 woocommerce_settings_tabs_array
。
首先您需要找到您需要从代码中的选项卡数组中删除的数组键。
为此,您将首先使用以下函数,该函数将在 Admin WooCommerce 设置中显示所有数组数据(仅用于测试,将被删除):
add_filter( 'woocommerce_settings_tabs_array', 'filter_wc_settings_tabs_array', 990, 1 );
function filter_wc_settings_tabs_array( $tabs_array ) {
// Display raw array data
echo '<pre>'; print_r( $tabs_array ); echo '</pre>';
return $tabs_array;
}
它将显示类似 (包含所有必需的数组键):
现在你可以得到你需要的数组键slugs,删除相应的选项卡设置。所以现在您将能够为您找到正确的数组键 slug 第三方插件 WooCommerce 设置选项卡,您将在下面的功能代码中使用它。
要针对特定用户角色,您可以使用 global $current_user; $current_user->角色;或 Wordpress 专用函数 current_user_can()
…
因此,将删除用户角色的特定设置选项卡的工作代码是:
add_filter( 'woocommerce_settings_tabs_array', 'filter_wc_settings_tabs_array', 200, 1 );
function filter_wc_settings_tabs_array( $tabs_array ) {
// Only for "shipping_manager" user role
if( current_user_can( 'shipping_manager' ) ) {
// Remove some specific tabs
unset( $tabs_array['general'], $tabs_array['order_status'] ); // <== replace 'order_status' by
}
return $tabs_array;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。