Я уже пытался отредактировать следующий код с сайта 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, и таблица тарифов отображались одновременно.
Основная проблема с использованием этого фрагмента состоит в том, что 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;
}
Других решений пока нет …