WooCommerce ограничить способ доставки на основе состояния

В нашем магазине у нас есть способы доставки UPS и USPS.
Продукты, которые мы продаем, бывают разных форм и размеров, поэтому мы должны использовать API, а не параметры ставок.

Я хочу, чтобы ставки USPS отображались только тогда, когда пользователь вводит почтовый индекс из AK, HI, PR, GU, AS, VI или UM. Я уже попробовал метод условной доставки и оплаты, но он не работает. Если я не ошибаюсь, это в любом случае сработает только для тарифов / опций, возвращаемых при оформлении заказа, а не для корзины, которая мне нужна.

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

Самый близкий ответ, который я могу найти, находится на варианте № 2 по ссылке ниже, однако он не работает, когда я пытаюсь это сделать: http://support.wooforce.com/hc/en-us/articles/207515625-Hiding-disabling-a-shipping-service

Вот код, который я настроил по этой ссылке, и который я пытался заставить его работать. Обратите внимание, что я хочу исключить метод для всех штатов, кроме Аляски, Гавайев, Пуэрто-Рико, Гуама, Американского Самоа, Виргинских островов и малых островов.

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

add_filter('woocommerce_package_rates', 'wf_hide_undesired_service_for_required_states', 10, 2);

function wf_hide_undesired_service_for_required_states($rates, $package)
{
$exclude = array(
'wf_shipping_usps:D_PRIORITY_MAIL' => array(
'AL', 'AR', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'GA', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MI', 'MN', 'MO', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'VT', 'WA', 'WI', 'WV', 'WY'
)
);
if (is_array($exclude)) {
foreach($exclude as $shipping_method => $excluded_states) {
if (in_array(WC()->customer->shipping_state, $excluded_states)) {
unset($rates[$shipping_method]);
}
}
}

return $rates;
}

1

Решение

Насколько я понимаю, вы хотите показывать тарифы USPS в реальном времени только тогда, когда клиент выбирает штат AK, HI, PR, GU, AS, VI или UM.

Решение подробно объясняется здесь.
http://www.xadapter.com/2016/06/17/woocommerce-filter-shipping-methods-based-on-state/

Ниже фрагмент кода будет работать без каких-либо изменений для WooForce USPS Shipping Plugin. Если вы используете плагин WooCommerce USPS любого другого поставщика, вы можете заставить его работать, изменив элементы переменной $eligible_services_for_states_list соответствующие значения, соответствующие этому плагину.

add_filter( 'woocommerce_package_rates', 'xa_show_shipping_method_based_on_state', 10, 2 );

function xa_show_shipping_method_based_on_state( $available_shipping_methods, $package ) {

$states_list = array( 'AK', 'HI', 'PR', 'GU', 'AS', 'VI', 'UM' );

$eligible_services_for_states_list  =   array(
'wf_shipping_usps:flat_rate_box_priority',
'wf_shipping_usps:flat_rate_box_express',
'wf_shipping_usps:D_FIRST_CLASS',
'wf_shipping_usps:D_EXPRESS_MAIL',
'wf_shipping_usps:D_STANDARD_POST',
'wf_shipping_usps:D_MEDIA_MAIL',
'wf_shipping_usps:D_LIBRARY_MAIL',
'wf_shipping_usps:D_PRIORITY_MAIL',
'wf_shipping_usps:I_EXPRESS_MAIL',
'wf_shipping_usps:I_PRIORITY_MAIL',
'wf_shipping_usps:I_GLOBAL_EXPRESS',
'wf_shipping_usps:I_FIRST_CLASS',
'wf_shipping_usps:I_POSTCARDS',
);

// Basically, below code will reset shipping services if the shipping
// state is other than defined states_list.
if ( !in_array(WC()->customer->shipping_state, $states_list) ) {
foreach ( $eligible_services_for_states_list as &$value ) {
unset( $available_shipping_methods[$value] );
}
}

return $available_shipping_methods;
}

Надеюсь, поможет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]