Регулировка доставки в woocommerce chook woocommerce_package_ratesPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Регулировка доставки в woocommerce chook woocommerce_package_rates

Сообщение Anonymous »

Я новичок в WOO и PHP, но я думаю, что у меня есть приличная ручка. Я хотел сортировать ставки доставки по порядку и использовал крюк woocommerce_package_rates. Это сработало отлично. На моем сайте тестирования также есть бесплатная доставка, когда общая сумма заказа составляет более 50 долларов, и я заметил, что бесплатные плагины USPS, которые я использовал, не чтир этого и продолжал вкладывать цены и методы, а также появились бесплатная доставка. Поэтому я отрегулировал звонок крючка, чтобы оставить бесплатную доставку только в том случае, когда она присутствовала. Работал как обаяние. Теперь у меня есть еще одна корректировка, которую я хочу сделать, и я не могу понять это правильно. У меня есть несколько предметов в магазине с длиной> 24 дюйма. The post office charges way too much for those to ship, so I want to remove the post office rates (I only use ground advantage and priority) if any of the items have a length over 24", just leaving the ups rates (or free shipping if that is the one rate). This is the PHP code I am using and it is not figuring the item lengths and removing USPS rates if needed. Any help would be appreciated....

Код: Выделить всё

    add_filter( 'woocommerce_package_rates','deal_with_woocommerce_available_shipping_methods', 10, 2 );
function deal_with_woocommerce_available_shipping_methods( $rates, $package ) {
//  if there are no rates don't do anything
if ( ! $rates ) {
return;
}
// get rid of rates if free is there
$rates_arr = array();
$free = false;
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$rates_arr[ $rate_id ] = $rate;
$free=true;
break;
}
}
// if it is free ship return it
if ( !empty( $rates_arr ) ) {
return $rates_arr;
}

/* remove all but ups if longest item > 24 */
if (!$free && longestItemLengthOver24()) {
foreach ( $rates as $rate_id => $rate ) {
if (strpos('UPS', serialize($rate))) {
$rates_arr[ $rate_id ] = $rate;
break;
}
}
}

// get an array of prices
$prices = array();
foreach( $rates_arr as $rate ) {
$prices[] = $rate->cost;
}

// use the prices to sort the rates
array_multisort( $prices, $rates_arr );

// return the rates
return $rates_arr;
}

function longestItemLengthOver24(){
// Loop through cart items
foreach( WC()->cart->get_cart() as $cart_item ) {
$product_length = $cart_item['data']->get_length(); // Get producct length

if( ! empty($product_length) ){
if ($product_length>24) {
return true;
}
}
}
return false;
}
Я попробовал приведенный выше код, и я ожидал, что он выяснит самый длинный элемент и удалит все, кроме взлетов, если более 24 дюймов.

Подробнее здесь: https://stackoverflow.com/questions/784 ... kage-rates
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»