Woocommerce Variables Dropdown

I am trying to implement a quantity drop down list for my woocommerce store, I found the code below for inclusion for individual products, but I cannot get it to work with products with options.

<?php // Place the following code in your theme 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 get is something like the image below

Desired Result

Is this possible with woocommerce?

+7
php drop-down-menu woocommerce
source share
2 answers

Turns out the best way to do this is to use grouped products.

0
source share

Here's the 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(); } } 
0
source share

All Articles