John Davidson

php - Change quantity input field to a Dropdown in WooCommerce

0 comments
Message:


I'm using the following in function.php and it works great on a single product page. The issue I have is on the cart page when you choose a different quantity it doesn't automatically update the cart. Any ideas?


function woocommerce_quantity_input( $args = array(), $product = null, $echo = true ) {

if ( is_null( $product ) ) {
$product = $GLOBALS['product'];
}

$defaults = array(
'input_id' => uniqid( 'quantity_' ),
'input_name' => 'quantity',
'input_value' => '1',
'classes' => apply_filters( 'woocommerce_quantity_input_classes', array( 'input-text', 'qty', 'text' ), $product ),
'max_value' => apply_filters( 'woocommerce_quantity_input_max', -1, $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' : '' ),
'product_name' => $product ? $product->get_title() : '',
);

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

// Apply sanity to min/max args - min cannot be lower than 0.
$args['min_value'] = max( $args['min_value'], 0 );
// Change 6 to max quantity
$args['max_value'] = 0 < $args['max_value'] ? $args['max_value'] : 6;

// Max cannot be lower than min if defined.
if ( '' !== $args['max_value'] && $args['max_value'] < $args['min_value'] ) {
$args['max_value'] = $args['min_value'];
}

$options = '';

for ( $count = $args['min_value']; $count <= $args['max_value']; $count = $count + $args['step'] ) {

// Cart item quantity defined?
if ( '' !== $args['input_value'] && $args['input_value'] >= 1 && $count == $args['input_value'] ) {
$selected = 'selected';
} else $selected = '';

$options .= '<option value="' . $count . '"' . $selected . '>' . $count . '</option>';

}

$string = '<div class="quantity"><span>Qty</span><select name="' . $args['input_name'] . '">' . $options . '</select></div>';

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

}


My Answer:
> 'quantity_' . $product->get_id(),
'input_name' => 'quantity_' . $product->get_id(),
'input_value' => isset( $_POST['quantity_' . $product->get_id() ] ) ? wc_stock_amount( $_POST['quantity_' . $product->get_id()] ) : 1, // WPCS: CSRF ok, input var ok.
'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 )
);

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

if ( ! empty( $args['min_value'] ) )
$min = $args['min_value'];
else $min = 1;

if ( ! empty( $args['max_value'] ) )
$max = $args['max_value'];
else $max = 20;

if ( ! empty( $args['step'] ) )
$step = $args['step'];
else $step = 1;

$options = '';

for ( $count = $min; $count <= $max; $count = $count+$step ) {
$options .= '';
}

echo '
';
}

Rate this post

4 of 5 based on 3825 votes

Comments




© 2024 Hayatsk.info - Personal Blogs Platform. All Rights Reserved.
Create blog  |  Privacy Policy  |  Terms & Conditions  |  Contact Us