// Tạo field trong variation add_action( 'woocommerce_variation_options', 'add_custom_variation_field', 10, 3 ); function add_custom_variation_field( $loop, $variation_data, $variation ) { woocommerce_wp_text_input( array( 'id' => '_custom_variation_field[' . $loop . ']', 'label' => 'Custom Save Percent(%)', 'desc_tip' => true, 'description' => '', 'value' => get_post_meta( $variation->ID, '_custom_variation_field', true ) )); } add_action( 'woocommerce_save_product_variation', 'save_custom_variation_field', 10, 2 ); function save_custom_variation_field( $variation_id, $i ) { $custom_field = $_POST['_custom_variation_field'][$i]; if ( isset( $custom_field ) ) { update_post_meta( $variation_id, '_custom_variation_field', esc_attr( $custom_field ) ); } } add_filter( 'woocommerce_available_variation', 'bbloomer_add_custom_field_variation_data' ); function bbloomer_add_custom_field_variation_data( $variations ) { $variations['save_percent'] = '<span class="discount-percentage">Save ' . get_post_meta( $variations[ 'variation_id' ], '_custom_variation_field', true ) . '%</span>'; return $variations; } // Tạo Save percentage trong variations function custom_variation_price_discount( $variations ) { if( isset( $variations['price_html'] ) && $variations['price_html'] != '' ) { $discount_message = ''; $variation = wc_get_product( $variations['variation_id'] ); if ( $variation->is_on_sale() ) { if($variations['save_percent'] && $variations['save_percent'] == ''){ $regular_price = $variation->get_regular_price(); $sale_price = $variation->get_sale_price(); if ( $regular_price > 0 && $sale_price > 0 ) { $percentage = round( ( ( $regular_price - $sale_price ) / $regular_price ) * 100 ); $discount_message = '<span class="discount-percentage">Save ' . $percentage . '%</span>'; } }else{ $discount_message = $variations['save_percent']; } } $variations['price_html'] = '<div class="price-wrap">'. $variations['price_html'] . $discount_message . '</div>'; } return $variations; } add_filter( 'woocommerce_available_variation', 'custom_variation_price_discount' );