it-swarm.com.ru

WooCommerce: добавить товар в корзину с переопределением цены?

$replace_order = new WC_Cart();
$replace_order->empty_cart( true );
$replace_order->add_to_cart( "256", "1");

Приведенный выше код добавляет товар 256 в корзину 1 раз. Но проблема, с которой я сталкиваюсь, заключается в том, что я хочу полностью изменить цену товара ... насколько я могу судить, единственное, что я могу сделать, это применить купон к корзине.

Есть ли способ полностью переопределить цену на что-то совершенно нестандартное?

34
dcolumbus

Вот код переопределения цены товара в корзине

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {
    $custom_price = 10; // This will be your custome price  
    foreach ( $cart_object->cart_contents as $key => $value ) {
        $value['data']->price = $custom_price;
        // for WooCommerce version 3+ use: 
        // $value['data']->set_price($custom_price);
    }
}

Надеюсь, это будет полезно ...

50
Ratnakar - StoreApps

Вам нужно ввести оператор if для проверки идентификатора продукта, в приведенном выше коде:

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {
    $custom_price = 10; // This will be your custome price  
    $target_product_id = 598;
    foreach ( $cart_object->cart_contents as $value ) {
        if ( $value['product_id'] == $target_product_id ) {
            $value['data']->price = $custom_price;
        }
        /*
        // If your target product is a variation
        if ( $value['variation_id'] == $target_product_id ) {
            $value['data']->price = $custom_price;
        }
        */
    }
}

Добавьте этот код куда угодно и убедитесь, что этот код всегда исполняемый.

После добавления этого кода, когда вы позвоните:

global $woocommerce; 
$woocommerce->cart->add_to_cart(598);

Только этот продукт будет добавлен с переопределенной ценой, другие товары, добавленные в корзину, будут игнорироваться для переопределения цен.

Надеюсь, это будет полезно.

43
Ratnakar - StoreApps

Я пробовал все приведенные выше примеры кода, и последняя версия woocommerce 3.0 не поддерживает ни один из приведенных выше примеров. Используйте приведенный ниже код и работайте идеально для меня.

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {
    $custom_price = 10; // This will be your custom price  
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        $cart_item['data']->set_price($custom_price);   
    }
}
11
Saran

После выпуска woocommerce версии 3.0.0 цена продукта обновляется при добавлении в корзину с помощью функции set_price ($ price). Пример приведен ниже:

add_action( 'woocommerce_before_calculate_totals', 'mj_custom_price' );

function mj_custom_price( $cart_object ) {
   $woo_ver = WC()->version; 
   $custom_price = 10;
   foreach ( $cart_object->cart_contents as $key => $value )
   {
       if($woo_ver < "3.0.0" && $woo_ver < "2.7.0")
       {
           $value['data']->price = $custom_price;
       }
       else
       {
           $value['data']->set_price($custom_price);
       }
   }            
}

Большое спасибо

6
Mohd Jafar

Для последней версии Wordpress и Woocommerce, пожалуйста, используйте как это

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {
    foreach ( $cart_object->cart_contents as $key => $value ) {
        $custom_price = 5;
        $value['data']->set_price($custom_price); 
    }
}
3
sumon cse-sust

Чтобы сделать его динамическим (цена переопределения для каждого товара в корзине отдельно), вам нужно сохранить цену товара переопределения в сеансе с ключом корзины в качестве ключа сеанса, используя woocommerce_add_to_cart ловушку.

используя эти значения сеанса, вы можете рассчитать правильную общую сумму корзины и сделать так, чтобы измененная цена отображалась в позиции заказа.

1
Sark

С WooCommerce 2.5 я обнаружил, что это процесс, состоящий из двух частей. Первый шаг - изменить отображение цены во время выполнения при добавлении в корзину через фильтр woocommerce_add_cart_item. Вторая часть состоит в том, чтобы установить постоянные данные сеанса, которые считываются во время проверки через фильтр woocommerce_get_cart_item_from_session. Похоже, это быстрее, чем подключать фильтры для вычисления итогов (например, woocommerce_before_calculate_totals), поскольку они очень часто запускаются в WooCommerce. 

Подробнее здесь: woocommerce меняет цену при добавлении в корзину

1
Lance Cleveland

Для всех, кто получил здесь от Google. Выше вышесказанное устарело, так как я обнаружил, что обновление до WooCommerce 3.0.1.

Вместо вышеупомянутого вам теперь нужно использовать set_price вместо price

Вот пример:

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
    $custom_price = 10; // This will be your custome price  
    foreach ( $cart_object->cart_contents as $key => $value ) {
        $value['data']->set_price = $custom_price;
    }
}

Я надеюсь, что это поможет людям в будущем :)

1
danyo

add_filter ('woocommerce_cart_item_price', 'kd_custom_price_message');

function kd_custom_price_message ($ price) {

    $textafter = ' USD'; 
    return $price . $textafter;

}

0
shrddha patel

Вот как я это сделал: сначала я добавляю свою собственную цену в cart_item_data, которая может сохранять пользовательские данные в корзину, затем я использую woocommerce_before_calculate_totals, зацикливаю корзину и добавляю ранее добавленную цену.

function add_donation_to_cart() { 

    $cart_item_data = array('price' => $_REQUEST['donate_amount']);
    $woocommerce->cart->add_to_cart( 5395, 1, '', array(), $cart_item_data);
}


add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart ) {
    foreach ( $cart->cart_contents as $key => $value ) {
        $value['data']->price = $value['price'];
    }
}
0
tobros91