Скрыть определенные методы доставки для определенных ролей пользователей в Woocommerce

В Woocommerce я использую WooCommerce Wholesale Pro Suite (от IgniteWoo) и плагины Flat Rate Box Shipping, чтобы добавить B2B в наш интернет-магазин.

Я пытаюсь отключить доставку коробки с фиксированной ставкой для определенных ролей пользователей, гостей и клиентов. Я нашел этот код после поиска в Интернете:

add_filter( 'woocommerce_package_rates', 'hide_shipping_for_user_role', 10, 2 );
function hide_shipping_for_user_role( $rates, $package ) {
// Role ID to be excluded
$excluded_role = "wholesale_customer";

// Shipping rate to be excluded
$shipping_id = 'table_rate_shipping_free-shipping';

// Get current user's role
$user = wp_get_current_user();
if ( empty( $user ) ) return false;

if( in_array( $excluded_role, (array) $user->roles ) && isset( $rates[ $shipping_id ] ) )
unset( $rates[ $shipping_id ] );

return $rates;
}

Что я должен использовать вместо «wholesale_customer» и вместо «table_rate_shipping_free-shipping», чтобы не отображалась фиксированная ставка для ролях гостей и клиентов?

Любая помощь приветствуется.


person Stelios Vasilakakis    schedule 10.10.2018    source источник


Ответы (1)


Обновление 2:

Возможно, вам придется «Включить режим отладки» в общих настройках доставки на вкладке «Параметры доставки», чтобы временно отключить кеши доставки.

Для информации. Идентификатор способа доставки для коробок с фиксированной ставкой - flat_rate_boxes.

Следующий код отключит "Ящики с фиксированной ставкой" Способы доставки для "гостей" (не вошедших в систему пользователей) и роли пользователя "клиент":

add_filter( 'woocommerce_package_rates', 'hide_specific_shipping_method_based_on_user_role', 30, 2 );
function hide_specific_shipping_method_based_on_user_role( $rates, $package ) {

    ## --- Your settings --- ##
    $excluded_role = "customer"; // User role to be excluded
    $shipping_id = 'flat_rate_boxes'; // Shipping rate to be removed

    foreach( $rates as $rate_key => $rate ){
        if( $rate->method_id === $shipping_id ){
            if( current_user_can( $excluded_role ) || ! is_user_logged_in() ){
                unset($rates[$rate_key]);
                break;
            }
        }
    }
    return $rates;
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Не забудьте включить кеш обратной доставки.

person LoicTheAztec    schedule 10.10.2018