0 Вопрос: Woocommerce обновляет цену на странице продукта динамически с помощью ввода в произвольное поле

вопрос создан в Thu, May 2, 2019 12:00 AM

Я хочу динамически обновлять цену на странице товара.

У меня есть пользовательская функция цены, которая генерирует цену для пользовательских полей ввода (высота по ширине).

Нестандартная цена действовала при оформлении заказа и оформлении заказа.

Цена на основе диапазона ввода:

function hmrc_add_custom_price_field_item_data( $cart_item_data, $product_id, $variation_id, $quantity ) {
    if( ! empty( $_POST['hmrc-height-title-field'] ) ) {
        $height = $_POST['hmrc-height-title-field'];
        $width = $_POST['hmrc-width-title-field'];
        $totalcalc = $height . 'mm x ' . $width . 'mm';
        $cart_item_data['title_field'] = $totalcalc;
        $product = wc_get_product( $product_id );
        $price = $product->get_price(); 

        if( $width <= 800 && $height <= 800) {
            $cart_item_data['total_price'] = 64.99;
        } elseif( $width <= 800 && $height >= 800 && $height <= 900) {
             $cart_item_data['total_price'] = 66.99;
        } elseif( $width <= 800 && $height >= 900 && $height <= 1000) {
            $cart_item_data['total_price'] = 67.99;
        } elseif( $width <= 800 && $height >= 1000 && $height <= 1200) {
            $cart_item_data['total_price'] = 69.99;
        } elseif( $width <= 800 && $height >= 1200 && $height <= 1400) {
            $cart_item_data['total_price'] = 74.99;
        } elseif( $width <= 800 && $height >= 1400 && $height <= 1600) 
        // … and so on
    } 
    return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'hmrc_add_custom_price_field_item_data', 10, 4 );

Это сработало для корзины и оформления заказа:

function hmrc_before_calculate_totals( $cart_obj ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
        return;
    }
    // Iterate through each cart item
    foreach( $cart_obj->get_cart() as $key=>$value ) {
        if( isset( $value['total_price'] ) ) {
            $price = $value['total_price'];
            $value['data']->set_price( ( $price ) );
        }
    }
}
add_action( 'woocommerce_before_calculate_totals', 'hmrc_before_calculate_totals', 10, 1 );
function hmrc_cart_item_name( $name, $cart_item, $cart_item_key ) {
    if( isset( $cart_item['title_field'] ) ) {
        $name .= sprintf(
            '<p>%s</p>',
            esc_html( $cart_item['title_field'] )
        );
    }
    return $name;
}
add_filter( 'woocommerce_cart_item_name', 'hmrc_cart_item_name', 10, 3 );

Надеюсь, кто-нибудь может мне помочь.

    
0
  1. Для этого требуется javascript /jQuery, так как это живое событие на стороне клиента на основе вычисления введенных /выбранных значений.
    2019-05-02 15: 43: 59Z
0 ответов                              0                         
источник размещен Вот