WooCommerce: Añadir producto al carrito con precio anular?
$replace_order = new WC_Cart();
$replace_order->empty_cart( true );
$replace_order->add_to_cart( "256", "1");
El código anterior agrega el producto 256
al carrito 1
tiempo. Pero el problema que estoy teniendo es que quiero ser capaz de anular completamente el precio del producto... por lo que puedo decir, lo único que puedo hacer es aplicar un cupón al Carrito.
¿Hay una manera de anular completamente el precio a algo totalmente personalizado?
9 answers
Aquí está el código para el precio superior del producto en el carrito
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);
}
}
Espero que sea útil...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-01 10:50:32
Debe introducir una instrucción if
para verificar el id del producto, en el código anterior:
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;
}
*/
}
}
Agregue este código en cualquier lugar y asegúrese de que este código sea siempre ejecutable.
Después de agregar este código, cuando llames:
global $woocommerce;
$woocommerce->cart->add_to_cart(598);
Solo se agregará este producto con precio anulado, otros productos agregados al carrito serán ignorados por precios anulados.
Espero que esto sea útil.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-22 13:24:15
He probado todas las muestras de código anteriores y la última woocommerce 3.0 no es compatible con ninguno de los ejemplos anteriores. Use el código debajo y funcione perfectamente para mí.
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);
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-12 01:38:33
Después del lanzamiento de woocommerce versión 3.0.0 precio del producto se actualiza en agregar al carrito utilizando la función set_price (price price). El ejemplo se da a continuación :
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);
}
}
}
Muchas gracias
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-06 07:44:16
Para la última versión de Wordpress y Woocommerce, utilice así
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);
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-11 09:05:00
Con WooCommerce 2.5 encontré que este es un proceso de 2 partes. El primer paso es cambiar la visualización en tiempo de ejecución de los precios cuando se agrega al carrito a través del filtro woocommerce_add_cart_item. La segunda parte es establecer los datos de sesión persistentes que se leen durante el proceso de pago a través del filtro woocommerce_get_cart_item_from_session. Esto parece ser más rápido que conectar los filtros calcular totales (como woocommerce_before_calculate_totals), ya que se ejecutan con mucha frecuencia en WooCommerce.
Más detalles aquí: woocommerce cambiar el precio mientras agregar al carrito
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:21
Para todos los que llegaron aquí desde Google. Lo anterior ahora está en desuso cuando descubrí la actualización a WooCommerce 3.0.1.
En lugar de lo anterior, ahora necesita usar set_price
en lugar de price
Aquí hay un ejemplo:
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;
}
}
Espero que esto ayude a la gente en el futuro:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-07 09:24:57
Para hacerlo dinámico ( anular el precio para cada artículo en el carrito por separado ), debe guardar el precio del producto anular en la sesión con la clave del artículo del carrito como clave de sesión utilizando el gancho woocommerce_add_to_cart
.
Utilizando estos valores de sesión, puede calcular el Total correcto del carrito y hacer que el precio alterado aparezca también en el Artículo del pedido
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-01 07:08:07
Así es como lo hice, primero agrego mi precio personalizado a cart_item_data que puede guardar datos personalizados en artículos del carrito, luego uso woocommerce_before_calculate_totals, loop el carrito y añado el precio agregado anteriormente.
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'];
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-28 14:25:35