// Tạo field trong variation để nhập

PHOTO EMBED

Sat Aug 16 2025 02:19:57 GMT+0000 (Coordinated Universal Time)

Saved by @vanthien

// 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' );
content_copyCOPY