2016-04-21 5 views
2

Я хотел бы скрыть специальную вкладку настройки woocommerce по роли пользователя. Не все подменю, а всего лишь вкладка (конкретная проверка). Я хочу, чтобы руководители магазинов имели доступ к большинству настроек, но не могли повлиять на настройки проверки.Скрыть вкладку настройки woocommerce

Как я могу это достичь?

ответ

1

Если вы хотите удалить вкладки, а не прятать их с помощью CSS, то вы можете добавить следующую к вашей теме functions.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; 
} 

Используется фильтр WoCommerce woocommerce_settings_tabs_array. Для получения дополнительной информации обо всех фильтрах и перехватах WooCommerce вы можете посмотреть здесь: https://docs.woocommerce.com/wc-apidocs/hook-docs.html

Это просто добавило преимущества, что он больше не находится в HTML, поэтому, если кто-то смотрит на источник, они не найдут элементы ,

Вы по-прежнему можете получить доступ к URL-адресам. Это всего лишь способ удалить вкладки, а не скрывать их.

EDIT: Я выяснил, как остановить доступ к 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; 
} 

Это почти так же, как и первый бит кода, кроме массива структурированы по-другому, и я добавил Еогеасп. Предпросмотр проходит через список вкладок, которые мы хотим заблокировать, перехватывает действие «woocommerce_settings _ {$ tab}», которое используется для отображения страниц настроек.

Затем я создал функцию redirect_from_tab_page, чтобы перенаправить пользователей на URL-адрес администратора по умолчанию. Это останавливает прямой доступ к вкладкам различных настроек.

+0

Спасибо за это. В результате я использовал правила переадресации для предотвращения доступа к самим URL-адресам. –

+0

См. Мой обновленный ответ, я получил эту работу, используя крючки действий. Может быть проще иметь все это в WordPress, а затем использовать правила переадресации. Я хотел сделать это так, так как мой WordPress - это многопользовательская установка. –

+1

Отлично. Я также хотел использовать его для многоуровневой установки. Я должен отметить этот ответ как принятый –

2

Поместите этот код в вашей теме/ребенка тема functions.php или где-нибудь еще:

if (!function_exists('hide_setting_checkout_for_shop_manager')){ 
    function hide_setting_checkout_for_shop_manager() { 

     $user = wp_get_current_user(); 
     //check if user is shop_manager 
     if (isset($user->roles[0]) && $user->roles[0] == 'shop_manager') { 
      echo '<style> .woocommerce_page_wc-settings form .woo-nav-tab-wrapper a[href="'.admin_url('admin.php?page=wc-settings&tab=checkout').'"]{ display: none; } </style>'; 
     } 

    } 
} 
add_action('admin_head', 'hide_setting_checkout_for_shop_manager'); 

стиль будет выводиться HTML только головой в WP-администратора и роль пользователей Логин является shop_manager.

Подробнее о admin_head крючка, пожалуйста, проверьте https://codex.wordpress.org/Plugin_API/Action_Reference/admin_head

+0

Да, это верно. Хороший ответ – LoicTheAztec

+0

Большое вам спасибо. Это сработало отлично. Однако, если они вводят URL-адрес, они могут получить доступ к странице. Я действительно надеялся, что у вас не будет доступа к странице. Я думаю, вы ответили на вопрос, хотя –

Смежные вопросы