Я пытаюсь скрыть доставку по тарифу таблицы, когда доступен метод доставки UPS

Я уже пытался отредактировать следующий код с сайта woothemes, чтобы скрыть способ доставки, который был таким:

    // woocommerce_package_rates is a 2.1+ hook

add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );
// Hide shipping rates when free shipping is available
// @param array $rates Array of rates found for the package
// @param array $package The package array/object being shipped
// @return array of modified rates
//
function hide_shipping_when_free_is_available( $rates, $package ) {

// Only modify rates if free_shipping is present
if ( isset( $rates['free_shipping'] ) ) {

// To unset a single rate/method, do the following. This example unsets flat_rate shipping
unset( $rates['flat_rate'] );

// To unset all methods except for free_shipping, do the following
$free_shipping          = $rates['free_shipping'];
$rates                  = array();
$rates['free_shipping'] = $free_shipping;
}

return $rates;
}

Я изменил код с «free_shipping» на «ups», который, как я полагал, был всем, что мне нужно было сделать, но, увы, из этого ничего не вышло.

Я использую Table Rate Shipping 2.9.0 от Mike Jolley
Woocommerce 2.4.6
и способ доставки UPS 3.1.1 по Woothemes

Любая помощь будет оценена.

То, что я пытаюсь сделать, это:
Не все мои продукты имеют размеры. На изделиях, которые имеют размеры и могут оформлять заказы через ИБП, я бы хотел, чтобы они ТОЛЬКО могли оформлять заказы через ИБП.
Если есть смешанная корзина или продукты без размеров, я хочу использовать доставку по тарифной ставке.

То, что я особенно не хочу, чтобы и UPS, и таблица тарифов отображались одновременно.

1

Решение

Основная проблема с использованием этого фрагмента состоит в том, что UPS и доставка по тарифным ставкам имеют несколько тарифов … и, следовательно, несколько идентификаторов тарифов. Таким образом, вы не можете эффективно проверить наличие определенной ставки с помощью простого isset($rates['ups']) ни сбрасывать еще один с unset($rates['table_rate']);

Взгляните на это var_dump из моих образцов доставки. Я использую USPS, потому что это то, что у меня есть под рукой, но я ожидаю, что это будет очень похоже на UPS.

Поэтому, насколько я могу судить, для достижения вашей цели нам нужно проверить ключи на наличие строк «ups» или «table_rate» в ключах массива. К счастью, это довольно легко strpos.

Я проверил это против USPS, и это, казалось, работало. Я использовал инструменты WooCommerce, чтобы перевести сайт в режим отладки. В противном случае, WooCommerce хранит ставки в переходном режиме в течение часа. (увидеть: admin.php?page=wc-status&tab=tools на Вашем сайте)

Вот мой окончательный код:

// remove any table_rate rates if UPS rates are present
add_filter( 'woocommerce_package_rates', 'hide_table_rates_when_ups_available', 10, 2 );

function hide_table_rates_when_ups_available( $rates, $package ) {

// Only modify rates if ups is present
if ( is_ups_available( $rates ) ) {

foreach ( $rates as $key => $rate ){
$pos = strpos( $key, 'table_rate' );
if( false !== $pos ){
unset( $rates[$key] );
}
}
}

return $rates;
}


// loops through the rates looking for any UPS rates
function is_ups_available( $rates ){
$is_available = false;
foreach ( $rates as $key => $rate ){
$pos = strpos( $key, 'ups' );
if( false !== $pos ){
$is_available = true;
break;
}
}
return $is_available;
}
2

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

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

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