Bài viết này mình tổng hợp đoạn mã custom hiển thị giảm giá trong chi tiết sản phẩm WooCommerce từ các dự án mình đã làm cho khách.
Dưới đây là đoạn mã mình đã thực hiện, ae copy add vào file function.php của theme là chạy.
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
function hwp_price_html($product, $is_variation = false){ ob_start(); if($product->is_on_sale()): ?> <style> .hwp_single_price { background-color: #199bc42e; border: 1px dashed #199bc4; padding: 10px; border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; margin: 0 0 10px; color: #000; display: block; } .hwp_single_price > span{ display: block; } .hwp_single_price span.label { color: #333; font-weight: 400; font-size: 14px; padding: 0; margin: 0; float: left; width: 82px; text-align: left; line-height: 18px; } .hwp_single_price span.hwp_price .amount { font-size: 14px; font-weight: 700; color: #ff3a3a; } .hwp_single_price span.hwp_price del .amount, .hwp_single_price span.hwp_price del { font-size: 14px; color: #333; font-weight: 400; } </style> <?php endif; if($product->is_on_sale() && ($is_variation || $product->is_type('simple') || $product->is_type('external'))) { $sale_price = $product->get_sale_price(); $regular_price = $product->get_regular_price(); if($regular_price) { $sale = round(((floatval($regular_price) - floatval($sale_price)) / floatval($regular_price)) * 100); $sale_amout = $regular_price - $sale_price; ?> <span class="hwp_single_price"> <span> <span class="label">Giá:</span> <span class="hwp_price"><?php echo wc_price($sale_price); ?></span> </span> <span> <span class="label">Thị trường:</span> <span class="hwp_price"><del><?php echo wc_price($regular_price); ?></del></span> </span> <span> <span class="label">Tiết kiệm:</span> <span class="hwp_price sale_amount"> <?php echo wc_price($sale_amout); ?> (<?php echo $sale; ?>%)</span> </span> </span> <?php } }elseif($product->is_on_sale() && $product->is_type('variable')){ $prices = $product->get_variation_prices( true ); if ( empty( $prices['price'] ) ) { echo apply_filters( 'woocommerce_variable_empty_price_html', '', $product ); } else { $min_price = current( $prices['price'] ); $max_price = end( $prices['price'] ); $min_reg_price = current( $prices['regular_price'] ); $max_reg_price = end( $prices['regular_price'] ); if ( $min_price !== $max_price ) { echo wc_format_price_range( $min_price, $max_price ) . $product->get_price_suffix(); } elseif ( $product->is_on_sale() && $min_reg_price === $max_reg_price ) { $sale = round(((floatval($max_reg_price) - floatval($min_price)) / floatval($max_reg_price)) * 100); $sale_amout = $max_reg_price - $min_price; ?> <span class="hwp_single_price"> <span> <span class="label">Giá:</span> <span class="hwp_price"><?php echo wc_price($min_price); ?></span> </span> <span> <span class="label">Thị trường:</span> <span class="hwp_price"><del><?php echo wc_price($max_reg_price); ?></del></span> </span> <span> <span class="label">Tiết kiệm:</span> <span class="hwp_price sale_amount"> <?php echo wc_price($sale_amout); ?> (<?php echo $sale; ?>%)</span> </span> </span> <?php } else { echo wc_price( $min_price ) . $product->get_price_suffix(); } } }else{ ?> <p class="<?php echo esc_attr( apply_filters( 'woocommerce_product_price_class', 'price' ) );?>"><?php echo $product->get_price_html(); ?></p> <?php } return ob_get_clean(); } function woocommerce_template_single_price(){ global $product; echo hwp_price_html($product); } add_filter('woocommerce_available_variation','hwp_woocommerce_available_variation', 10, 3); function hwp_woocommerce_available_variation($args, $thisC, $variation){ $old_price_html = $args['price_html']; if($old_price_html){ $args['price_html'] = hwp_price_html($variation, true); } return $args; } |
Chúc ae thành công!