Изменение цен на товары в корзине на основе определенного значения атрибута продукта в Woocommerce


Я пытаюсь изменить цену товара в корзине, используя следующую функцию:

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 10);
function add_custom_price( $cart_obj ) {
    foreach ( $cart_obj->get_cart() as $key => $value ) {
        $item_data = $value['data'];
        $price0 = $item_data->get_attributes('per_one_price');
        $price  = (int) $price0;
        $value['data']->set_price( $num_int );
    }
}

Но для любого числа, которое я задаю в качестве значения атрибута продукта для атрибута per_one_price, я получаю число 1 в цене корзины.

Author: LoicTheAztec, 2018-09-03

1 answers

Обновление - Есть 2 небольшие ошибки:

  • Заменить get_attributes() на get_attribute() ( единственное число).
  • Заменить 'per_one_price' на 'Per one price' ( или 'per-one-price' как пробелы заменяются тире)

Поэтому вместо этого попробуйте следующее:

add_action( 'woocommerce_before_calculate_totals', 'set_custom_item_price', 20, 1 );
function set_custom_item_price( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item ) {
        // get attibute value
        $new_price = $cart_item['data']->get_attribute('per-one-price');

        if( ! empty( $new_price ) ){
            // Set the new price
            $cart_item['data']->set_price( $new_price );
        }
    }
}

Вводится код function.php файл вашей активной дочерней темы (или активной темы). протестировано и работает.


Создать "За одну цену" продукт атрибут:

enter image description here

Представление настройки цены продукта:

enter image description here

Атрибут продукта, установленный в продукте с его значением:

enter image description here

Просмотр страницы корзины с этим товаром:

enter image description here

 2
Author: LoicTheAztec, 2018-10-01 10:27:57