WooCommerce add_to_cart() cu preț personalizat

2 nov. 2017, 23:45:16
Vizualizări: 20.4K
Voturi: 3

Folosesc această metodă în combinație cu un apel ajax pentru a seta un produs dintr-un configurator în coșul meu:

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

Cum pot folosi această metodă pentru a seta un preț personalizat calculat? Este posibil?

Cu stimă,

Marvin

1
Comentarii

Am încercat săptămâna trecută dar nu am reușit. Voi urmări această întrebare.

sakarya sakarya
3 nov. 2017 00:23:04
Toate răspunsurile la întrebare 1
4
12

În prezent, nu există o modalitate directă de a adăuga un preț personalizat pentru un produs care este adăugat prin funcția $woocommerce->cart->add_to_cart (Documentație), dar avem o soluție ocolitoare pe care o voi explica în codul de mai jos.

global $woocommerce;
$custom_price = 1000;
// Datele articolului din coș pentru a trimite și salva în comandă
$cart_item_data = array('custom_price' => $custom_price);   
// Funcția WooCommerce pentru a adăuga produsul în coș - verifică și documentația
// Aici avem nevoie doar de $product_id și $cart_item_data, restul pot fi implicite.
$woocommerce->cart->add_to_cart( $product_id, $quantity, $variation_id, $variation, $cart_item_data );
// Calculează totalurile
$woocommerce->cart->calculate_totals();
// Salvează coșul în sesiune
$woocommerce->cart->set_session();
// Setează eventual cookie-uri pentru coș
$woocommerce->cart->maybe_set_cart_cookies();

În fișierul tău de funcții, poți adăuga următorul cod:

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"] ) ) {
                // pentru versiuni WooCommerce mai vechi de 3
                //$value['data']->price = $value["custom_price"];
                // pentru versiuni WooCommerce 3+
                $value['data']->set_price($value["custom_price"]);
            }
        }  
    }  
}
add_action( 'woocommerce_before_calculate_totals', 'woocommerce_custom_price_to_cart_item', 99 );

Și asta e tot, ai terminat!

30 ian. 2018 14:38:43
Comentarii

Excelent! A rezolvat problema mea. Mulțumesc

Zaheer Abbas Zaheer Abbas
9 iul. 2020 15:14:31

și cum să afișez cart_item_data în pagina coșului? precum și în e-mailul de comandă și în pagina de istoric comenzi?

Rahul Shinde Rahul Shinde
3 sept. 2020 15:03:00

Prin implementarea codului de mai sus, funcționează pentru prețul personalizat, dar pentru alte produse setează prețul la 0. Ai vreo idee de ce?

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