Я хочу включить или отключить методы доставки в зависимости от роли пользователя. Я тестировал различные коды и подходы, ни один из которых пока не работал.
Текущий код: (источник: stacklink а>)
add_filter( 'woocommerce_package_rates', 'hide_specific_shipping_method_based_on_user_role', 30, 2 );
function hide_shipping_method_based_on_user_role( $rates, $package ) {
$shipping_id = 'shipmondo:3';
foreach( $rates as $rate_key => $rate ){
if( $rate->method_id === $shipping_id ){
if( current_user_can( 'b2b' ) || ! is_user_logged_in()){
unset($rates[$rate_key]);
break;
}
}
}
return $rates;
}
(Также протестировал исходный фрагмент, без изменений, согласен на роль пользователя) У меня не работает. Я также тестировал его с помощью local_pickup. Иногда он работает, но, похоже, очень чувствителен к кешу браузера и сеансу. Также мне нужны 3 метода, которые вызываются под одним и тем же именем, но с дочерним номером, разделяющим их: shipmondo: 3, shipmondo: 4 и т. Д. (Можно найти при проверке браузера в разделе Value). Также есть что-то, называемое ID, которое выглядит так: 'shipping_method_0_shipmondo3' Не знаю, могу ли я использовать это вместо этого, но это довольно сложно понять, когда код не обновляется правильно. Этот фрагмент относится к 2018 году, поэтому он может быть устаревшим, но новые фрагменты, которые я нашел, основаны на одном и том же принципе и, похоже, не сильно отличаются.
Кроме того, почему || ! is_user_logged_in () понадобиться? Мне нужно только отключить 2 из 3 методов для оптового пользователя, не нужно влиять ни на какие другие роли или гостей. Боролся с этим уже несколько дней.
Кроме того, есть ли какой-нибудь совет, как заставить Wordpress и Woocommerce обновляться, а не плавать в кеше?
Заранее спасибо.