php - Cambiar los precios de los artículos del carrito en Woocommerce 3
wordpress cart (2)
Estoy tratando de cambiar el precio del producto en el carrito usando la siguiente función:
add_action( ''woocommerce_before_shipping_calculator'', ''add_custom_price''
);
function add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
$value[''data'']->price = 400;
}
}
Funcionaba correctamente en WooCommerce versión 2.6.x pero ya no funcionaba en la versión 3.0+
¿Cómo puedo hacer que funcione en WooCommerce Versión 3.0+?
Gracias.
Con WooCommerce versión 3.2.6, la respuesta de @ LoicTheAztec funciona para mí si aumento la prioridad a 1000.
add_action( ''woocommerce_before_calculate_totals'', ''add_custom_price'', 1000, 1);
Intenté valores de prioridad de
10
,
99
y
999
pero el precio y el total en mi carrito no cambiaron (aunque pude confirmar con
get_price()
que
set_price()
realmente había establecido el precio del artículo.
Tengo un gancho personalizado que agrega una tarifa a mi carrito y estoy usando un complemento de terceros que agrega atributos de producto. Sospecho que estos "complementos" de WooCommerce introducen demoras que requieren que demore mi acción personalizada.
Actualización (septiembre de 2018)
Con WooCommerce versión 3.0+ necesitas:
-
Para utilizar
woocommerce_before_calculate_totals
hook en su lugar. -
Para usar el
método WC_Cart
get_cart()
lugar -
Para utilizar el
método WC_product
set_price()
lugar
Aquí está el código:
add_action( ''woocommerce_before_calculate_totals'', ''add_custom_price'', 20, 1);
function add_custom_price( $cart_obj ) {
// This is necessary for WC 3.0+
if ( is_admin() && ! defined( ''DOING_AJAX'' ) )
return;
// Avoiding hook repetition (when using price calculations for example)
if ( did_action( ''woocommerce_before_calculate_totals'' ) >= 2 )
return;
// Loop through cart items
foreach ( $cart_obj->get_cart() as $cart_item ) {
$cart_item[''data'']->set_price( 40 );
}
}
El Código va en el archivo function.php de su tema secundario activo (o tema) o también en cualquier archivo de complemento.
Este código está probado y funciona.
Nota: puede aumentar la prioridad de enlace de
20
a1000
(o incluso2000
) al usar algunos complementos específicos u otras personalizaciones.
Relacionado:
- Establezca el precio del artículo del carrito a partir de un precio personalizado de campo de entrada oculto en Woocommerce 3
- Cambiar los precios de los artículos del carrito en función de los datos personalizados del artículo del carrito en Woocommerce
- Establezca un precio de producto específico condicionalmente en la página y carrito de productos individuales de Woocommerce
- Agregue un campo de selección que cambiará el precio en productos simples de Woocommerce