2012-09-08 13 views
29
$replace_order = new WC_Cart(); 
$replace_order->empty_cart(true); 
$replace_order->add_to_cart("256", "1"); 

Powyższy kod dodaje produkt 256 do koszyka 1 czas. Ale problem, który mam, polega na tym, że chcę całkowicie zastąpić cenę produktu ... O ile wiem, jedyną rzeczą, którą mogę to zrobić, jest zastosowanie kuponu do koszyka.WooCommerce: Dodaj produkt do koszyka z pominięciem ceny?

Czy istnieje sposób, aby całkowicie zmienić cenę na coś całkowicie niestandardowego?

+0

Sprawdź ten link bardzo użytecznie https: //www.cloudways .pl/blog/change-woocommerce-price-display/ – Sourabh

Odpowiedz

46

Oto kod nadrzędne cenę produktu w koszyku

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); 
    } 
} 

nadzieję, że będzie użyteczny ...

+0

Wielkie dzięki! Czy masz sporo doświadczenia z WooCommerce? – dcolumbus

+5

Powoduje to aktualizację koszyka. Ale wciąż w ikonie szybkiego koszyka na górze wyświetla rzeczywistą cenę produktu. Jakieś haczyki? –

+1

Przykro mi to uderzyć .... czy powyższe działa z odmianami? – danyo

41

Musisz przedstawić oświadczenie if do sprawdzania ID produktu, w powyższym kodzie:

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; 
     } 
     */ 
    } 
} 

Dodaj ten kod w dowolnym miejscu i upewnij się, że ten kod jest zawsze wykonywalny.

Po dodaniu tego kodu, kiedy zadzwonisz:

global $woocommerce; 
$woocommerce->cart->add_to_cart(598); 

tylko zostanie dodany produkt z zastąpionej cenie, inne produkty dodane do koszyka zostaną zignorowane nadrzędne ceny.

Mam nadzieję, że będzie to pomocne.

+1

Jak ustawić niestandardową cenę na podstawie danych wprowadzanych przez użytkownika? Ta niestandardowa cena jest zakodowana na sztywno. Jakieś sugestie? Coś jak funkcja add_custom_price ($ cart_object, $ custom_price) – shish

+1

Jak mogę dynamicznie uzyskać docelowy identyfikator produktu, którego kliknięcie przycisku Dodaj do koszyka? –

+2

Wygląda na to, że te dwie odpowiedzi powinny zostać połączone. – Kirby

1

Aby było dynamiczne (należy zastąpić cenę za każdy przedmiot w koszyku osobno), należy zapisać cenę produktu w sesji z kluczem pozycji koszyka jako klucz sesji z hakiem woocommerce_add_to_cart.

za pomocą tych wartości sesji można obliczyć prawidłowe KOSZYK i sprawiają, że zmieniony cenę pojawiają się w pozycji zamówienia, jak również

Można odwołać się następujące guide aby uzyskać szczegółowe informacje na przykładzie.

1

W WooCommerce 2.5 okazało się, że jest to proces dwuczęściowy. Pierwszym krokiem jest zmiana wyświetlania cen w czasie wykonywania po dodaniu do koszyka przez filtr woocommerce_add_cart_item. Druga część to ustawienie trwałych danych sesji, które są odczytywane podczas kasowania za pomocą filtra woocommerce_get_cart_item_from_session. Wydaje się, że jest to szybsze niż podpięcie się do obliczania sumarycznych filtrów (takich jak woocommerce_before_calculate_totals), ponieważ są one bardzo często uruchamiane w WooCommerce.

Więcej szczegółów tutaj: woocommerce change price while add to cart

+0

Czy można dodać cenę niestandardową każdego produktu do koszyka, a nie powtarzać nad dodanymi produktami koszyka? –

0

tak właśnie zrobił, pierwszy i dodać swój własny cenę do cart_item_data czarownicę można zapisać dane niestandardowe do koszyka przedmiotów, a następnie użyć woocommerce_before_calculate_totals Pętla koszyka i dodać wcześniej dodana cena.

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']; 
    } 
} 
1

Dla każdego, kto dostał się tutaj od Google. Powyższe informacje są teraz przestarzałe, ponieważ dowiedziałem się, że aktualizuję WooCommerce 3.0.1.

Zamiast powyższego teraz trzeba użyć set_price zamiast price

Oto przykład:

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; 
    } 
} 

Mam nadzieję, że to pomaga ludziom w przyszłości :)

7

próbowałem wszystkie powyższe próbki kodu i najnowszy Woocommerce 3.0 nie obsługuje żadnego z powyższych przykładów. Użyj poniższego kodu i działa idealnie dla mnie.

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); 
    } 
} 
+0

Wypróbuj mój przykład powyżej. – danyo

+0

Ta opcja nie działa dla mnie. –

+0

Czy wypróbowałeś dokładny kod? Mam to uruchomione w wersji na żywo premium z 1000 instalacjami. Którą wersję WooCommerce masz zainstalowaną? – danyo

6

Po wydaniu wersji 3.0.0 woocommerce cena produktu jest aktualizacja dodaj do koszyka, używając set_price ($ cena) funkcję. Przykład podany jest poniżej:

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); 
     } 
    }    
} 

Dziękujemy

3

Dla Wordpress i woocommerce najnowszej wersji, proszę użyć jak ten

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); 
    } 
} 
Powiązane problemy