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

Mã trên thêm sản phẩm 256 vào giỏ hàng 1 thời gian. Nhưng vấn đề tôi gặp phải là tôi muốn có thể hoàn toàn ghi đè giá sản phẩm ... theo như tôi có thể nói, điều duy nhất tôi có thể làm là áp dụng phiếu giảm giá cho Giỏ hàng.WooCommerce: Thêm sản phẩm vào giỏ hàng với ghi đè giá?

Có cách nào để ghi đè hoàn toàn giá cho thứ gì đó hoàn toàn tùy chỉnh không?

+0

Kiểm tra liên kết này rất hữu ích https: //www.cloudways .com/blog/change-woocommerce-price-display/ – Sourabh

Trả lời

46

Đây là mã cho trọng giá của sản phẩm trong giỏ

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

Hy vọng nó sẽ hữu ích ...

+0

Cảm ơn rất nhiều! Bạn có khá nhiều kinh nghiệm với WooCommerce không? – dcolumbus

+5

Thao tác này sẽ cập nhật giỏ hàng. Nhưng vẫn trong biểu tượng giỏ hàng nhanh ở đầu nó hiển thị giá sản phẩm thực tế. Có móc nào không? –

+1

xin lỗi để làm phiền điều này .... hiện công việc trên với các biến thể? – danyo

41

Bạn cần phải giới thiệu một tuyên bố if để kiểm tra id sản phẩm, trong đoạn code trên:

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

Thêm mã này ở bất kỳ đâu và đảm bảo rằng mã này luôn có thể thực thi được.

Sau khi thêm mã này, khi bạn sẽ gọi:

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

Chỉ sản phẩm này sẽ được thêm vào với giá ghi đè, các sản phẩm khác thêm vào giỏ hàng sẽ bị bỏ qua cho trọng giá.

Hy vọng điều này sẽ hữu ích.

+1

Làm cách nào để đặt giá tùy chỉnh dựa trên đầu vào của người dùng? Giá tùy chỉnh này được mã hóa cứng. Bất kỳ đề xuất? Một cái gì đó giống như hàm add_custom_price ($ cart_object, $ custom_price) – shish

+1

làm cách nào tôi có thể nhận được id sản phẩm mục tiêu của sản phẩm trong đó thêm nút giỏ hàng vào? –

+2

Có vẻ như hai câu trả lời này nên được kết hợp. – Kirby

1

Để làm cho quảng cáo động (ghi đè giá cho mỗi mục trong giỏ hàng riêng), bạn cần lưu giá sản phẩm ghi đè trong phiên có khóa mục giỏ hàng làm khóa phiên sử dụng móc woocommerce_add_to_cart.

bằng cách sử dụng các giá trị phiên bạn có thể tính toán chính xác giỏ toàn bộ và làm cho giá bị thay đổi xuất hiện trong thứ tự mục cũng

Bạn có thể tham khảo các guide sau để biết chi tiết hoàn chỉnh với một ví dụ.

1

Với WooCommerce 2.5 Tôi thấy đây là quy trình gồm 2 phần. Bước đầu tiên là thay đổi giá hiển thị thời gian chạy khi được thêm vào giỏ hàng thông qua bộ lọc woocommerce_add_cart_item. Phần thứ hai là đặt dữ liệu phiên liên tục được đọc trong khi thanh toán qua bộ lọc woocommerce_get_cart_item_from_session. Điều này có vẻ nhanh hơn so với các bộ lọc tổng số tính toán (chẳng hạn như woocommerce_before_calculate_totals) khi chúng được chạy rất thường xuyên trong WooCommerce.

Xem thêm chi tiết ở đây: woocommerce change price while add to cart

+0

là có thể thêm giá tùy chỉnh của từng sản phẩm vào giỏ hàng thay vì lặp qua các sản phẩm giỏ hàng đã thêm không? –

0

Đây là cách tôi đã làm nó, đầu tiên tôi thêm giá tùy chỉnh của tôi để cart_item_data phù thủy có thể lưu dữ liệu tùy chỉnh để các mặt hàng giỏ, sau đó tôi sử dụng woocommerce_before_calculate_totals, vòng lặp giỏ hàng và thêm trước thêm giá.

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

Đối với eveeryone có tại đây từ Google. Ở trên là bây giờ không được chấp nhận như tôi phát hiện ra bản cập nhật cho WooCommerce 3.0.1.

Thay vì ở trên bây giờ bạn cần phải sử dụng set_price thay vì price

Dưới đây là một ví dụ:

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

Tôi hy vọng điều này sẽ giúp mọi người trong tương lai :)

7

Tôi đã cố gắng tất cả các mẫu mã trên và woocommerce 3.0 mới nhất không hỗ trợ bất kỳ ví dụ nào ở trên. Sử dụng mã dưới đây và làm việc hoàn hảo cho tôi.

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

Thử ví dụ của tôi ở trên. – danyo

+0

Tùy chọn đó không hoạt động đối với tôi. –

+0

Bạn đã thử mã chính xác chưa? Tôi có điều này đang chạy trong một plugin cao cấp sống với 1000 lượt cài đặt. Bạn đã cài đặt phiên bản WooCommerce nào? – danyo

6

Sau khi phát hành phiên bản woocommerce 3.0.0, giá sản phẩm được cập nhật khi thêm vào giỏ hàng bằng hàm set_price ($ price). Ví dụ được đưa ra như sau:

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

Nhiều Cảm ơn

3

Đối với Wordpress và phiên bản mới nhất Woocommerce, Vui lòng sử dụng như thế này

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); 
    } 
} 
Các vấn đề liên quan