WooCommerce add_to_cart() con prezzo personalizzato

2 nov 2017, 23:45:16
Visualizzazioni: 20.4K
Voti: 3

Sto utilizzando questo metodo in combinazione con una chiamata ajax per aggiungere un prodotto dal configuratore al mio carrello:

$woocommerce->cart->add_to_cart($p_id, $p_quantity, $p_var_id, $p_var_name);

Come posso utilizzare questo metodo per impostare un prezzo personalizzato calcolato? È possibile?

Saluti,

Marvin

1
Commenti

Ho provato la scorsa settimana ma non ci sono riuscito. Seguirò questa domanda.

sakarya sakarya
3 nov 2017 00:23:04
Tutte le risposte alla domanda 1
4
12

Attualmente non esiste un modo diretto per aggiungere un prezzo personalizzato a un prodotto aggiunto tramite la funzione $woocommerce->cart->add_to_cart (Documentazione), ma esiste una soluzione alternativa che spiego nel codice qui sotto

global $woocommerce;
$custom_price = 1000;
// Dati dell'articolo nel carrello da inviare e salvare nell'ordine
$cart_item_data = array('custom_price' => $custom_price);   
// Funzione woocommerce per aggiungere un prodotto al carrello, controlla anche la sua documentazione
// qui ci servono solo $product_id e $cart_item_data, gli altri possono essere predefiniti.
$woocommerce->cart->add_to_cart( $product_id, $quantity, $variation_id, $variation, $cart_item_data );
// Calcola i totali
$woocommerce->cart->calculate_totals();
// Salva il carrello nella sessione
$woocommerce->cart->set_session();
// Imposta eventuali cookie del carrello
$woocommerce->cart->maybe_set_cart_cookies();

Nel tuo file functions.php puoi inserire il seguente codice

 function woocommerce_custom_price_to_cart_item( $cart_object ) {  
    if( !WC()->session->__isset( "reload_checkout" )) {
        foreach ( $cart_object->cart_contents as $key => $value ) {
            if( isset( $value["custom_price"] ) ) {
                //per versioni di woocommerce inferiori a 3
                //$value['data']->price = $value["custom_price"];
                //per versioni di woocommerce 3+
                $value['data']->set_price($value["custom_price"]);
            }
        }  
    }  
}
add_action( 'woocommerce_before_calculate_totals', 'woocommerce_custom_price_to_cart_item', 99 );

e sei a posto

30 gen 2018 14:38:43
Commenti

Eccellente! Ha risolto il mio problema. Grazie

Zaheer Abbas Zaheer Abbas
9 lug 2020 15:14:31

e come mostrare cart_item_data nella pagina del carrello? così come nell'email dell'ordine e nella pagina dello storico degli ordini?

Rahul Shinde Rahul Shinde
3 set 2020 15:03:00

Implementando il codice sopra, funziona per il prezzo personalizzato ma per gli altri prodotti imposta il prezzo a 0. Hai qualche idea?

David Coder David Coder
4 apr 2024 11:11:46