Cập nhật sản phẩm có nhiều biến thể (Variable Product) trên WooCommerce là một lựa chọn hợp lý nếu bạn muốn gộp các sản phẩm giống nhau nhưng khác về màu sắc, kích cỡ, dung tích, khối lượng, kích thước,… Và đây là bài viết tổng hợp tất cả các vấn đề liên quan đến sản phẩm có nhiều biến thể nhé.
Hướng dẫn cập nhật sản phẩm có nhiều biến thể
Tham khảo nhanh tại đây https://docs.uxthemes.com/article/305-how-to-enable-label-image-and-color-swatches-for-variable-product-variations
Plugin Variation Swatches for WooCommerce
Link tải về: https://wordpress.org/plugins/woo-variation-swatches/
Sử dụng plugin Plugin Variation Swatches for WooCommerce trên thêm Flatsome: https://docs.uxthemes.com/article/305-how-to-enable-label-image-and-color-swatches-for-variable-product-variations
Thay đổi khoảng giá WooCommerce thành 1 giá sau khi lựa chọn biến thể
- Chuyển thành 1 giá ngay lập tức
- Hiển thị thay thế ở vị trí khoảng giá, không phải ở dưới khu vực biến thể
Xem chi tiết tại đây
Thay đổi khoảng giá sang “chỉ từ : …”
- Chỉ thay đổi với sản phẩm có biến thể
- Thêm “chỉ từ: … vào trước giá thấp nhất
Thêm đoạn code sau vào file functions.php mà theme bạn đang sử dụng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function wc_wc20_variation_price_format( $price, $product ) { //Main Price $prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) ); $price = $prices[0] !== $prices[1] ? sprintf( __( 'Giá từ: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] ); // Sale Price $prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) ); sort( $prices ); $saleprice = $prices[0] !== $prices[1] ? wc_price( $prices[0] ) : wc_price( $prices[0] ); if ( $price !== $saleprice ) { $price = '<del>' . $saleprice . '</del> <ins>' . $price . '</ins>'; } return $price; } add_filter( 'woocommerce_variable_sale_price_html', 'wc_wc20_variation_price_format', 10, 2 ); add_filter( 'woocommerce_variable_price_html', 'wc_wc20_variation_price_format', 10, 2 ); |
Nguồn: https://levantoan.com/
Liệt kê toàn bộ giá theo biến thể của sản phẩm
Thêm đoạn code sau vào file functions.php mà theme bạn đang sử dụng
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 | function find_valid_variations() { global $product; $variations = $product->get_available_variations(); $attributes = $product->get_attributes(); $new_variants = array(); // Loop through all variations foreach( $variations as $variation ) { // Peruse the attributes. // 1. If both are explicitly set, this is a valid variation // 2. If one is not set, that means any, and we must 'create' the rest. $valid = true; // so far foreach( $attributes as $slug => $args ) { if( array_key_exists("attribute_$slug", $variation['attributes']) && !empty($variation['attributes']["attribute_$slug"]) ) { // Exists } else { // Not exists, create $valid = false; // it contains 'anys' // loop through all options for the 'ANY' attribute, and add each foreach( explode( '|', $attributes[$slug]['value']) as $attribute ) { $attribute = trim( $attribute ); $new_variant = $variation; $new_variant['attributes']["attribute_$slug"] = $attribute; $new_variants[] = $new_variant; } } } // This contains ALL set attributes, and is itself a 'valid' variation. if( $valid ) $new_variants[] = $variation; } return $new_variants; } function list_price_variable(){ global $product, $post; $variations = find_valid_variations(); // Check if the special 'price_grid' meta is set, if it is, load the default template: if ( get_post_meta($post->ID, 'price_grid', true) ) { // Enqueue variation scripts wp_enqueue_script( 'wc-add-to-cart-variation' ); // Load the template wc_get_template( 'single-product/add-to-cart/variable.php', array( 'available_variations' => $product->get_available_variations(), 'attributes' => $product->get_variation_attributes(), 'selected_attributes' => $product->get_variation_default_attributes() ) ); return; } // Cool, lets do our own template! ?> <table class="variations variations-grid" cellspacing="0"> <tbody> <?php foreach ($variations as $key => $value) { if( !$value['variation_is_visible'] ) continue; ?> <tr> <td> <?php foreach($value['attributes'] as $key => $val ) { $val = str_replace(array('-','_'), ' ', $val); $category_slug = str_replace('attribute_', '', $key); $category = get_term_by('slug', ucwords($val), $category_slug); $categoryName = $category->name.' '; printf( '<span class="attr attr-%s">%s</span>', $key, $categoryName); } ?> </td> <td> <?php echo $value['price_html'];?> </td> </tr> <?php } ?> </tbody> </table> <?php } function wc_wc20_variation_price_format( $price, $product ) { $price = list_price_variable(); return $price; } //add_filter( 'woocommerce_variable_sale_price_html', 'wc_wc20_variation_price_format', 10, 2 ); add_filter( 'woocommerce_variable_price_html', 'wc_wc20_variation_price_format', 10, 2 ); |
Nguồn: https://levantoan.com/
Rất hữu ích, cám ơn ad đã chia sẻ