移除WooCommerce设置中的常规选项卡和插件选项卡

时间:2020-04-17 作者:Les

我希望特定用户只看到WooCommerce->Settings->Shipping菜单。我已成功删除了其他选项卡,例如产品、付款等,但我仍坚持要完成以下两件事:

删除WooCommerce设置中的“常规”选项卡

enter image description here

当我尝试删除“常规”选项卡时,它会删除整个“设置”菜单。至于“订单状态”,我的代码就是不起作用。

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
         }

    }

2 个回复
最合适的回答,由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 要测试的用户角色,希望不会造成任何问题

SO网友:mujuonly

以下是简单的答案

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;
}

相关推荐

在主机的PHP升级后开始收到警告消息

我使用的儿童主题是2122(客户总是对的)。我最近开始在仪表板顶部和仪表板的Jetpack面板上看到以下警告机器人:“警告:在第81行的/home/leytongr/public\\u html/wp-content/plugins/theme-logo-plugin/themelogo.PHP中使用未定义的常量register\\u设置-假定“register\\u设置”(这将在PHP的未来版本中引发错误)。”这是从第80行开始的代码,您将看到我在这里提出查询的原因:function tl_init()