我希望特定用户只看到WooCommerce->Settings->Shipping菜单。我已成功删除了其他选项卡,例如产品、付款等,但我仍坚持要完成以下两件事:
删除WooCommerce设置中的“常规”选项卡从插件中删除“订单状态”选项卡。(注意:这不完全是一个选项卡,slug是“edit.php?post\\u type=wc\\u order\\u status”)
当我尝试删除“常规”选项卡时,它会删除整个“设置”菜单。至于“订单状态”,我的代码就是不起作用。
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);
}
}
我还尝试了以下代码来删除订单状态选项卡,但仍然没有成功:
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
}
}
最合适的回答,由SO网友:Tony Djukic 整理而成
因此,由于WC设置页面的构建方式,您无法取消设置常规屏幕。当然可以,但单击仪表板子菜单中的WooCommerce设置将始终加载常规设置,即使缺少该选项卡。因此,我编写了两个不同的函数来删除所有内容,而第二个函数恰好允许我们删除订单状态屏幕。(虽然不确定该选项卡,但您可以使用CSS隐藏该选项卡,因为我们已经可以确保如果用户级别较低,则无法导航到该面板。)shipping_managers
.)
add_filter( \'woocommerce_settings_tabs_array\', \'remove_woocommerce_setting_tabs\', 200, 1 );
function remove_woocommerce_setting_tabs( $array ) {
global $current_user;
if( in_array( \'shipping_manager\', $current_user->roles ) ) {
unset( $array[ \'general\' ] );
unset( $array[ \'products\' ] );
unset( $array[ \'tax\' ] );
unset( $array[ \'checkout\' ] );
unset( $array[ \'account\' ] );
unset( $array[ \'email\' ] );
unset( $array[ \'integration\' ] );
unset( $array[ \'advanced\' ] );
echo \'<script>jQuery( document ).ready( function($) { $( \\\'[href="\' . admin_url() . \'/edit.php?post_type= wc_order_status"]\\\' ).hide(); } );</script>\';
}
return $array;
}
add_action( \'admin_init\', \'redirect_from_settings_screen\' );
function redirect_from_settings_screen() {
global $pagenow;
global $current_user;
if( in_array( \'shipping_manager\', $current_user->roles ) ) {
if( $pagenow == \'admin.php\' && isset( $_GET[\'page\'] ) && $_GET[\'page\'] == \'wc-settings\' && !isset( $_GET[\'tab\'] ) ) {
wp_redirect( admin_url( \'/admin.php?page=wc-settings&tab=shipping\' ) );
exit;
}
if( $pagenow == \'edit.php\' && isset( $_GET[\'post_type\'] ) && $_GET[\'post_type\'] == \'wc_order_status\' ) {
wp_redirect( admin_url( \'/admin.php?page=wc-settings&tab=shipping\' ) );
exit;
}
}
}
下面是一个细分,第一个功能允许我们删除所有WC设置选项卡,包括General。除了导航到WC设置屏幕将在默认情况下加载常规设置字段之外,它的工作方式与treat类似。所以这不好。但是,其他一切都不见了,发货标签也可以看到,而且工作得很好。
接下来,我们有一个将访问重定向到常规设置屏幕的功能admin.php?page=wc-settings
将人员发送到admin.php?page=wc-settings&tab=shipping
.
然后我再加上一个检查$pagenow
在订单状态屏幕上,检查post_type
如果是wc_order_status
如果是,请再次将其重定向到Shipping。
现在,第一个函数删除了所有这些不同设置面板的选项卡,但从技术上讲,用户仍然可以访问URL,如果他们知道的话。因此,您可以重复设置General->Shipping重定向,或者将其作为一个选项卡数组来执行,并确保即使手动尝试访问其他选项卡也会重新路由到Shipping。
NOTE
<我没有
shipping_manager
要测试的用户角色,希望不会造成任何问题