В следующих двух функциях вам потребуется сначала установить идентификатор продукта родительской переменной, а в первой функции - каждый идентификатор варианта с соответствующей фиксированной величиной.
Для динамической установки величины ввода в зависимости от каждойВыбранный вариант, единственный способ - использовать Javascript (Jquery).Это делается во 2-й функции.
Код:
add_filter( 'woocommerce_available_variation', 'custom_variation_min_max_qty', 10, 3 );
function custom_variation_min_max_qty( $data, $product, $variation ) {
// Your variable product ID
$variable_id = 73;
if( $product->get_id() == $variable_id ) {
// Set 1st variation ID
if( $variation->get_id() == 1015 ){
$qty = 3; // Set the quantity
}
// Set 2nd variation ID
elseif( $variation->get_id() == 1014 ){
$qty = 6; // Set the quantity
}
// Set 3rd variation ID
elseif( $variation->get_id() == 1013 ){
$qty = 12; // Set the quantity
}
}
if( isset($qty) ) {
$data['min_qty'] = $qty;
$data['max_qty'] = $qty;
}
return $data;
}
add_action( 'woocommerce_after_single_variation', 'change_variation_input_quantity_script' );
function change_variation_input_quantity_script() {
global $product;
// Your variable product ID
$variable_id = 73;
if( $product->get_id() != $variable_id ) return;
// Output Javascript
?>
<!-- JS Thankyou Script -->
<script type="text/javascript">
jQuery(function($) {
var a = 'div.quantity > input.qty';
// On load
setTimeout(function(){
$(a).val($(a).prop('min'));
}, 300);
// On change / select a variation
$('.variations_form select').on( 'blur', function(){
if( $('input[name="variation_id"]').val() > 0 )
$(a).val($(a).prop('min'));
})
});
</script>
<?php
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы).Протестировано и работает.
Можно автоматизировать обнаружение правильного варианта на основе определенных значений атрибутов продукта ...
Как и в вашем примере, это можно сделать , нацеливаясь наЗначение атрибута продукта цвета для варианта .Вам нужно будет определить в функции таксономию атрибута «Цвет» продукта, которая будет pa_color
.
Таким образом, вы замените первую функцию этой:
add_filter( 'woocommerce_available_variation', 'custom_variation_min_max_qty', 10, 3 );
function custom_variation_min_max_qty( $data, $product, $variation ) {
// Your variable product ID
$variable_id = 73;
if( $product->get_id() == $variable_id ) {
// Define your product attribute (always start with "pa_" + the slug)
$taxonomy = 'pa_color';
foreach($data['attributes'] as $attribute => $value_slug ){
if( $attribute == 'attribute_' . $taxonomy ) {
// set your color slugs below with the correct quantity
if ( $value_slug == 'red' )
{
$qty = 3; // Set the quantity for "Red" color
break;
}
elseif ( $value_slug == 'blue' )
{
$qty = 6; // Set the quantity for "Blue" color
break;
}
elseif ( $value_slug == 'green' )
{
$qty = 12; // Set the quantity for "Green" color
break;
}
}
}
}
if( isset($qty) ) {
$data['min_qty'] = $qty;
$data['max_qty'] = $qty;
}
return $data;
}
Вы сохраните вторую функцию такой, какая она есть.
Код сохраняется в файле function.php вашей активной дочерней темы (или активной темы).Проверено и работает.