Woocommerce可变产品下拉列表

I am trying to implement quantity dropdown for my woocommerce shop, i found the code below to enable for single products but I cannot get it working for products with variations.

<?php
// Place the following code in your theme's functions.php file
// override the quantity input with a dropdown
// Note that you still have to invoke this function like this:
/*
$product_quantity = woocommerce_quantity_input( array(
  'input_name'  => "cart[{$cart_item_key}][qty]",
  'input_value' => $cart_item['quantity'],
  'max_value'   => $_product->backorders_allowed() ? '' : $_product->get_stock_quantity(),
  'min_value'   => '0'
), $_product, false );
*/
function woocommerce_quantity_input($data) {
    global $product;
  $defaults = array(
    'input_name'    => $data['input_name'],
    'input_value'   => $data['input_value'],
    'max_value'   => apply_filters( 'woocommerce_quantity_input_max', '', $product ),
    'min_value'   => apply_filters( 'woocommerce_quantity_input_min', '', $product ),
    'step'    => apply_filters( 'woocommerce_quantity_input_step', '1', $product ),
    'style'   => apply_filters( 'woocommerce_quantity_style', 'float:left; margin-right:10px;', $product )
  );
  if ( ! empty( $defaults['min_value'] ) )
    $min = $defaults['min_value'];
  else $min = 1;
  if ( ! empty( $defaults['max_value'] ) )
    $max = $defaults['max_value'];
  else $max = 20;
  if ( ! empty( $defaults['step'] ) )
    $step = $defaults['step'];
  else $step = 1;
  $options = '';
  for ( $count = $min; $count <= $max; $count = $count+$step ) {
    $selected = $count === $defaults['input_value'] ? ' selected' : '';
    $options .= '<option value="' . $count . '"'.$selected.'>' . $count . '</option>';
  }
  echo '<div class="quantity_select" style="' . $defaults['style'] . '"><select name="' . esc_attr( $defaults['input_name'] ) . '" title="' . _x( 'Qty', 'Product quantity input tooltip', 'woocommerce' ) . '" class="qty">' . $options . '</select></div>';
}
?>

The result i am after is something like the image below

Desired result

Is this possible with woocommerce?

Turns out the best way of doing this was to use grouped products

Here's an updated version of woocommerce_quantity_input()

/**
 * Output the quantity input for add to cart forms.
 *
 * @param  array $args Args for the input
 * @param  WC_Product|null $product
 * @param  boolean $echo Whether to return or echo|string
 */
function woocommerce_quantity_input( $args = array(), $product = null, $echo = true ) {
    if ( is_null( $product ) ) {
        $product = $GLOBALS['product'];
    }

    $defaults = array(
        'input_name'  => 'quantity',
        'input_value' => '1',
        'max_value'   => apply_filters( 'woocommerce_quantity_input_max', '20', $product ),
        'min_value'   => apply_filters( 'woocommerce_quantity_input_min', '0', $product ),
        'step'        => apply_filters( 'woocommerce_quantity_input_step', '1', $product ),
        'pattern'     => apply_filters( 'woocommerce_quantity_input_pattern', has_filter( 'woocommerce_stock_amount', 'intval' ) ? '[0-9]*' : '' ),
        'inputmode'   => apply_filters( 'woocommerce_quantity_input_inputmode', has_filter( 'woocommerce_stock_amount', 'intval' ) ? 'numeric' : '' ),
    );


    $args = apply_filters( 'woocommerce_quantity_input_args', wp_parse_args( $args, $defaults ), $product );

    // Set min and max value to empty string if not set.
    $args['min_value'] = isset( $args['min_value'] ) ? $args['min_value'] : '1';
    $args['max_value'] = isset( $args['max_value'] ) ? $args['max_value'] : '20';

    // Apply sanity to min/max args - min cannot be lower than 0
    if ( '' !== $args['min_value'] && is_numeric( $args['min_value'] ) && $args['min_value'] < 0 ) {
        $args['min_value'] = 0; // Cannot be lower than 0
    }

    // Max cannot be lower than 0 or min
    if ( '' !== $args['max_value'] && is_numeric( $args['max_value'] ) ) {
        $args['max_value'] = $args['max_value'] < 0 ? 0 : $args['max_value'];
        $args['max_value'] = $args['max_value'] < $args['min_value'] ? $args['min_value'] : $args['max_value'];
    }

    ob_start();

    $options = '';

    for ( $count = $args['min_value']; $count <= $args['max_value']; $count = $count + $args['step'] ) {
        $options .= '<option value="' . $count . '"'. selected( $count, $args['input_value'], false ) .'>' . $count . '</option>';
    }
    echo '<div class="quantity_select" style="' . $args['style'] . '"><select name="' . esc_attr( $args['input_name'] ) . '" title="' . _x( 'Qty', 'Product quantity input tooltip', 'woocommerce' ) . '" class="qty">' . $options . '</select></div>';

    if ( $echo ) {
        echo ob_get_clean();
    } else {
        return ob_get_clean();
    }
}