/ / Спеціальна безкоштовна доставка розрахована вартість тарифу в Woocommerce 3 - php, wordpress, woocommerce, checkout, shipping

Спеціальна безкоштовна доставка розрахована вартість тарифу в Woocommerce 3 - php, wordpress, woocommerce, checkout, shipping

У мене виникли проблеми із застосуванням цього фільтра наперевіряти. Наведений нижче код працює, як очікується, на сторінці кошика, етикетки для методів доставки кожного оновлення, якщо вказані критерії (в даному випадку "free_shipping") виконані.

add_filter( "woocommerce_package_rates", "my_custom_shipping", 100, 2 );

function my_custom_shipping( $rates, $package ) {

$percentage = 0.01;

foreach($rates as $key => $rate ) {

$test_method_id = $rates[$key]->method_id;
if ( $test_method_id === "free_shipping" ){
$surcharge = ( wc()->cart->cart_contents_total + $rates[$key]->cost ) * $percentage;
$rates[$key]->label .= " Fee: {$surcharge}";
$rates[$key]->cost += $surcharge;
}
}



return $rates;

}// Function END

хоча це добре працює на сторінці кошика (але тількиз активованим режимом налагодження, нічого не завантажується, коли режим відладки вимкнений, що дуже неприємно), на сторінці перевірки зміни робляться ненадовго (я можу прокрутити вниз і побачити їх), але вони швидко перезаписуються з оригінальними мітками. Я не можу зрозуміти, чому, я думав, що налаштування фільтра для виклику пізніше може допомогти, але це не здається.

всі дані є, і я можу виводити і бачити це, але це просто не застосовується в постійний спосіб на касі, чому це відбувається?

Відповіді:

1 для відповіді № 1

Ви дійсно можете отримати початкову вартість ставки "безкоштовна доставка", оскільки не існує жодних полів для методу "Безкоштовна доставка" в бекенді.

Але ви можете додати обчислену вартість і змінити мітку (по-різному):

add_filter( "woocommerce_package_rates", "custom_shipping_rates", 100, 2 );
function custom_shipping_rates( $rates, $package ) {
$cc_total = WC()->cart->cart_contents_total;
$percentage = 0.01; // 1%

foreach( $rates as $rate_key => $rate ) {
if ( "free_shipping" === $rate->method_id ){

// Calculation
$surcharge = $cc_total * $percentage;

// Set the new Label name
$rates[$rate_key]->label .= " " . __("Fee", "woocommerce");

// Set Custom rate cost
$rates[$rate_key]->cost = round($surcharge, 2);
}
}
return $rates;
}

Код переходить у файл function.php активної дочірньої теми (або активної теми). Тестується і працює

введіть опис зображення тут

Необхідно оновити кеші доставки:
1) Спочатку цей код вже збережено у файлі function.php.
2) У параметрах доставки перейдіть до зони доставки та вимкніть a метод доставки і "зберегти". Потім знову ввімкніть це метод доставки і "зберегти". Ви готові.


Оновлення: (Примусове очищення методів доставки з WC_Session):

add_filter( "woocommerce_package_rates", "custom_shipping_rates", 100, 2 );
function custom_shipping_rates( $rates, $package ) {
// Reset session
WC()->session->set("shipping_for_package_0", array("package_hash" => ""));

$cc_total = WC()->cart->cart_contents_total;
$percentage = 0.01; // 1%

foreach( $rates as $rate_key => $rate ) {
if ( "free_shipping" === $rate->method_id ){

// Calculation
$surcharge = $cc_total * $percentage;

// Set the new Label name
$rates[$rate_key]->label .= " " . __("Fee", "woocommerce");

// Set Custom rate cost
$rates[$rate_key]->cost = round($surcharge, 2);
}
}

return $rates;
}

Код переходить у файл function.php активної дочірньої теми (або активної теми). Це може працювати…