Скрыть определенные способы доставки для определенных ролей пользователей в 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
", так что фиксированная стоимость доставки не отображается для гостей и клиентов?
Любая помощь приветствуется.
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 вашей активной дочерней темы (или активной темы). Проверено и работает.
Не забудьте включить кеш обратной доставки.