Пользовательский динамический расчет стоимости доставки в WoocommercePhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Пользовательский динамический расчет стоимости доставки в Woocommerce

Сообщение Anonymous »

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

Похоже, что woocommerce_package_rates действие (где я рассчитываю стоимость доставки) запускается только тогда, когда пользователь нажимает на способ доставки. Таким образом, в большинстве случаев общая сумма корзины неверна. Хуже всего, если уже выбран индивидуальный метод доставки (пользователю не нужно нажимать на него, поэтому стоимость не обновляется).

Это нормальное поведение перехватчика woocommerce_package_rates?

Как заставить woocommerce_package_rates быть всегда< /strong> выполняется перед отображением корзины итоги?

РЕДАКТИРОВАТЬ


Вот код, с помощью которого я пытаюсь взломать :

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

add_action( 'woocommerce_before_cart', 'force_shipping_calc', 1, 0 );
function force_shipping_calc() {
foreach( WC()->session->get('shipping_for_package_0')['rates'] as $rate_id =>$rate) {
// looking for the shipping method to recalc
if($rate->method_id == 'flat_rate') {

// mk1: set_shipping_total won't work, i'm using woocommerce < 3
//WC()->cart->set_shipping_total( MY_calculate_shipping() );

// mk2: doesn't work, "Indirect modification of overloaded property"
WC()->cart->totals['shipping_total'] = wc_format_decimal( MY_calculate_shipping(), wc_get_price_decimals() );

// mk3: cart total nor shipping total affected (?!)
WC()->cart->shipping_total = MY_calculate_shipping();

// mk4: ... ?! work in progress...
}
}

function MY_calculate_shipping() {
return 99.99;
}

add_filter( 'woocommerce_package_rates', 'fty_shipping_flat_rate_cost_calculation', 10, 2 );
function fty_shipping_flat_rate_cost_calculation($rates, $package) {
foreach($rates as $rate_key => $rate_values) {

$method_id = $rate_values->method_id;
$rate_id = $rate_values->id;

if ( 'flat_rate' === $method_id ){

$dist_cost  =   MY_calculate_shipping();

$price_excl_tax = $rates[$rate_id]->cost + $dist_cost;
$rates[$rate_id]->cost =  number_format($price_excl_tax, 2);

$tax_keys   =   array_keys($rates[$rate_id]->taxes);

$price_excl_tax = $rates[$rate_id]->cost + $dist_cost;
$rates[$rate_id]->cost =  number_format($price_excl_tax, 2);

$tax_calculation = $rates[$rate_id]->taxes[$tax_keys[0]] + $dist_cost*(TAX_AMOUNT_IVA-1);
$rates[$rate_id]->taxes[$tax_keys[0]] = number_format($tax_calculation, 2);

$rates[$rate_id]->cost +=   $dist_cost;
}
}

return $rates;
}
РЕДАКТИРОВАТЬ, еще раз

Это (мк. ~17786), кажется, в правильном направлении.
Я изменил перехват и принудительно вычислил_shipping() из WC_Shipping

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

add_action( 'woocommerce_cart_totals_before_shipping', 'fty_force_calculate_shipping', 1, 2550 );
function fty_force_calculate_shipping() {
WC()->shipping->calculate_shipping(WC()->shipping->packages);
WC()->cart->calculate_totals();
}
но он еще не идеален, я думаю, что этот крючок зацикливается на странице оформления заказа...

Подробнее здесь: https://stackoverflow.com/questions/493 ... oocommerce
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Замените ноль на БЕСПЛАТНО для стоимости доставки WooCommerce на странице одного продукта.
    Anonymous » » в форуме Php
    0 Ответы
    45 Просмотры
    Последнее сообщение Anonymous
  • Удалить сообщение о стоимости доставки в таблице корзины в Woocommerce 3.5
    Anonymous » » в форуме Php
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как я могу получить order_total без налогов и стоимости доставки? О WooCommerce
    Anonymous » » в форуме Php
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Условная установка стоимости метода доставки Woocommerce
    Anonymous » » в форуме Php
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Условная установка стоимости метода доставки Woocommerce
    Anonymous » » в форуме Php
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

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