Ответы пользователя по тегу WordPress
  • Как можно заменить цены в вариациях глобально?

    @yatvoydomtrubashatal Автор вопроса
    Дизайню утилитарные сайтики
    Решил

    Сначала через фильтр проверяем данные, которые посылает форма. Названия атрибутов прописаны вручную.
    add_filter( 'woocommerce_add_cart_item_data', 'add_cart_item_data', 10, 3 );
    function add_cart_item_data( $cart_item_data, $product_id, $variation_id ) {
        $product = wc_get_product( $variation_id );
        $price = $product->get_price(); // variation price
        $variant = $_POST['attribute_pa_variant-izgotovleniya']; // option name 
        $razmer = $_POST['attribute_pa_razmer']; // option name
        if( $variant == 'bumazhnyj-poster' && $razmer == '30x40' ) {
            $cart_item_data['new_price'] = 600;
        }
        if( $variant == 'bumazhnyj-poster' && $razmer == '40x60' ) {
            $cart_item_data['new_price'] = 700;
        }
        if( $variant == 'bumazhnyj-poster' && $razmer == '50x70' ) {
            $cart_item_data['new_price'] = 800;
        }
        if( $variant == 'bumazhnyj-poster' && $razmer == '60x90' ) {
            $cart_item_data['new_price'] = 900;
        }
        return $cart_item_data;
    }


    Потом обновляем данные в корзине
    add_action( 'woocommerce_before_calculate_totals', 'before_calculate_totals', 10, 1 );
    function 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['new_price'] ) ) {
    $price = $value['new_price'];
    $value['data']->set_price( ( $price ) );
    }
    }
    }
    Ответ написан
    Комментировать