Raúl
Estoy tratando de agregar un$order = wc_create_order();
donde el precio del producto lo define el usuario. Se agrega un producto en particular al pedido que ya tiene un precio predeterminado que debe ser anulado por el valor que el usuario ingresó.
Traté de usar woocommerce_before_calculate_totals
función pero sin suerte. Supongo que no funciona ya que el producto se añade directamente al pedido sin añadirlo al carrito.
También he probado a usar el set_total( $value, $deprecated = '' )
me gusta
$order = wc_create_order();
$order->set_total($amount); //where the $amount is my custom price.
pero el valor del pedido no cambia. ¿Hay alguna otra manera de lograr lo mismo?
Me encontré en la misma situación: necesitaba usar la API de WooCommerce para crear pedidos con precios personalizados por pedido en productos específicos.
Resulta que la función WC_Order::add_product acepta un tercer parámetro que le permite establecer un valor personalizado para ‘subtotal’ y ‘total’:
https://docs.woocommerce.com/wc-apidocs/source-class-WC_Abstract_Order.html#1109-1160
$order = wc_create_order();
$order->add_product( $product, $quantity, [
'subtotal' => $custom_price_for_this_order, // e.g. 32.95
'total' => $custom_price_for_this_order, // e.g. 32.95
] );
$order->save();
Cuando busque este pedido en el panel de control de WooCommerce, mostrará su precio personalizado en lugar del precio predeterminado del producto.
LoicTheAztec
Esta es la forma de incluir un precio personalizado para un producto al crear un pedido.
Suponiendo que establecerá en el pedido recién creado todos los demás tipos de datos y elementos (como la dirección del cliente, los impuestos, etc.), ya que esto no es parte de la pregunta y ya se ha respondido anteriormente en otros hilos.
El código:
## -- HERE Define everything related to your product -- ##
$product_id = '41'; // a product ID or a variation ID
$new_product_price = 120; // the new product price <==== <==== <====
$quantity = 1; // The line item quantity
## - - - - - - - - - - - - - - - - - - - - - - - - - - ##
// Get an instance of the WC_Product object
$product = wc_get_product( $product_id );
// Change the product price
$product->set_price( $new_product_price );
## - - - - - - - - - - - - - - - - - - - - - - - - - - ##
// Create the order
$order = wc_create_order();
// Add the product to the order
$order->add_product( $product, $quantity);
## You will need to add customer data, tax line item … ##
$order->calculate_totals(); // updating totals
$order->save(); // Save the order data
Probado y funciona