隐藏woocommerce设置选项卡

时间:2016-04-21 19:58:50

标签: wordpress wordpress-plugin woocommerce

我想按用户角色隐藏特定的woocommerce设置标签。不是整个子菜单,而只是一个标签(结帐具体)。 我希望店铺经理能够访问大部分设置,但无法影响结帐设置。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

将此代码放在主题/子主题functions.php或其他地方:

try {
    for (PlacesSearchResult result : sortedPoints) {
        PlaceDetailsRequest placeDetailsRequest = 
            new PlaceDetailsRequest(geoApiContext);
        placeDetailsRequest.placeId(result.placeId);
        PlaceDetails placeDetails = placeDetailsRequest.await();
        objectOfInterests.add(convert(placeDetails));
    }
} catch (Exception e) {
    e.printStackTrace();
}

该样式将仅在wp-admin输出到html头,登录用户角色为shop_manager。

有关admin_head hook的更多信息,请查看https://codex.wordpress.org/Plugin_API/Action_Reference/admin_head

答案 1 :(得分:2)

如果要删除选项卡而不是使用CSS隐藏它们,则可以将以下内容添加到您的主题函数中.php:

add_filter( 'woocommerce_settings_tabs_array', 'remove_woocommerce_setting_tabs', 200, 1 );
function remove_woocommerce_setting_tabs( $tabs ) {
    // Declare the tabs we want to hide
    $tabs_to_hide = array(
        'Tax',
        'Checkout',
        'Emails',
        'API',
        'Accounts',
        );


    // Get the current user
    $user = wp_get_current_user();

    // Check if user is a shop-manager
    if ( isset( $user->roles[0] ) && $user->roles[0] == 'shop_manager' ) {

        // Remove the tabs we want to hide
        $tabs = array_diff($tabs, $tabs_to_hide);
    }

    return $tabs;
}

这使用了WooCommerce'woocommerce_settings_tabs_array'过滤器。有关所有WooCommerce过滤器和挂钩的更多信息,请参阅此处:https://docs.woocommerce.com/wc-apidocs/hook-docs.html

这只是有一个额外的好处,它不再在HTML中,所以如果有人查看源,他们将找不到元素。

您仍然可以访问这些网址。这只是一种删除标签而不是隐藏它们的方法。

修改 我已经想出了如何停止访问URL。复制以下内容:

add_filter( 'woocommerce_settings_tabs_array', 'remove_woocommerce_setting_tabs', 200, 1 );
function remove_woocommerce_setting_tabs( $array ) {
    // Declare the tabs we want to hide
    $tabs_to_hide = array(
        'tax' => 'Tax',
        'checkout' => 'Checkout',
        'email' => 'Emails',
        'api' => 'API',
        'account' => 'Accounts',
        );

    // Get the current user
    $user = wp_get_current_user();

    // Check if user is a shop_manager
    if ( isset( $user->roles[0] ) && $user->roles[0] == 'shop_manager' ) {

        // Remove the tabs we want to hide from the array
        $array = array_diff_key($array, $tabs_to_hide);

        // Loop through the tabs we want to remove and hook into their settings action
        foreach($tabs_to_hide as $tabs => $tab_title) {
            add_action( 'woocommerce_settings_' . $tabs , 'redirect_from_tab_page');
        }
    }

    return $array;
}

function redirect_from_tab_page() {
    // Get the Admin URL and then redirect to it
    $admin_url = get_admin_url();
    wp_redirect($admin_url);
    exit;
}

这与第一段代码几乎相同,除了数组的结构不同,我添加了一个foreach。 foreach遍历我们想要阻止的标签列表,挂钩到用于显示设置页面的'woocommerce_settings _ {$ tab}'动作。

然后我创建了一个redirect_from_tab_page函数,将用户重定向到默认的管理URL。这将停止直接访问不同的设置选项卡。