WooCommerce: Đặt / Ghi đè giá sản phẩm theo lập trình

Đôi khi, cài đặt trang sản phẩm chỉnh sửa là không đủ. Có, bạn thường đặt giá thông thường và giá ưu đãi thông qua các trường giá trong “Dữ liệu sản phẩm”; tuy nhiên, đôi khi bạn có thể phải ghi đè các giá đó qua mã, vì bạn đang chạy chương trình khuyến mãi đặc biệt, bạn không muốn thay đổi hàng nghìn giá theo cách thủ công hoặc có thể bạn cần hiển thị các giá trị khác nhau cho khách hàng đã đăng nhập.

Dù bằng cách nào, “đặt” giá sản phẩm theo chương trình bao gồm hai thao tác riêng biệt. Trước tiên, bạn cần thay đổi “hiển thị” giá sản phẩm trên các trang đơn lẻ và trang lặp; thứ hai, bạn thực sự cần đặt giá “mặt hàng trong giỏ hàng”, vì mã trước đó không thực sự thay đổi giá trị giá.

Để dễ hiểu hơn bạn hãy xem ảnh chụp màn hình dưới đây.

Đây là ảnh chụp màn hình của trang sản phẩm đơn lẻ sau khi áp dụng chiết khấu 20% chỉ cho khách hàng đã đăng nhập. Giá gốc là $ 34

Đoạn mã PHP: Giá sản phẩm thay thế có lập trình @ WooCommerce Frontend

Ví dụ: trong đoạn mã dưới đây, chúng tôi sẽ chỉ thay đổi giá của một ID sản phẩm nếu người dùng đã đăng nhập và là khách hàng đã đăng ký. Tất nhiên, bạn có thể áp dụng chiến lược tương tự cho các trường hợp khác nhau, ví dụ như thay đổi giá cho một danh mục sản phẩm cụ thể, áp dụng phụ phí cho tất cả các sản phẩm dưới $ 10, v.v. Các ứng dụng là vô tận.

add_filter( 'woocommerce_get_price_html', 'bbloomer_alter_price_display', 9999, 2 );

function bbloomer_alter_price_display( $price_html, $product ) {

// ONLY ON FRONTEND
if ( is_admin() ) return $price_html;

// ONLY IF PRICE NOT NULL
if ( '' === $product->get_price() ) return $price_html;

// IF CUSTOMER LOGGED IN, APPLY 20% DISCOUNT
if ( wc_current_user_has_role( 'customer' ) ) {
$orig_price = wc_get_price_to_display( $product );
$price_html = wc_price( $orig_price * 0.80 );
}

return $price_html;

}


add_action( 'woocommerce_before_calculate_totals', 'bbloomer_alter_price_cart', 9999 );

function bbloomer_alter_price_cart( $cart ) {

if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;

// IF CUSTOMER NOT LOGGED IN, DONT APPLY DISCOUNT
if ( ! wc_current_user_has_role( 'customer' ) ) return;

// LOOP THROUGH CART ITEMS & APPLY 20% DISCOUNT
foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
$product = $cart_item['data'];
$price = $product->get_price();
$cart_item['data']->set_price( $price * 0.80 );
}

}

Và đây là ảnh chụp màn hình của cùng một sản phẩm, ở chế độ đăng xuất. Điều này hiển thị giá sản phẩm ban đầu ($ 34) theo cài đặt WooCommerce. Nó hiển thị cho tất cả người dùng chưa đăng nhập và cũng cho tất cả người dùng đã đăng nhập không phải là “khách hàng”:

Thêm đoạn mã này vào đâu?

Bạn có thể đặt các đoạn mã PHP ở cuối tệp functions.php chủ đề con của mình (trước “?>” Nếu bạn có). Mặt khác, CSS có trong tệp style.css chủ đề con của bạn.

Đoạn mã này (vẫn) hoạt động chứ?

Vui lòng cho tôi biết trong phần bình luận nếu mọi thứ hoạt động như mong đợi. Tôi rất sẵn lòng sửa đổi đoạn mã nếu bạn góp ý phù hợp (vui lòng cung cấp ảnh chụp màn hình).

 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *