• Home
  • WordPress
    • How To
    • Plugins
    • Themes
      • Genesis
      • Themify
      • Mysite myway
    • Security
    • Developer
    • Teaching
    • Conference
    • Chat
  • Blog
  • About
  • Freelance
    • Plugins
    • Teaching
    • Need help?
    • CV og ref.
  • Contact

Easy Web Design Tutorials

WordPress Tutorials and more

  • Home
  • WordPress
    • How To
    • Plugins
    • Themes
      • Genesis
      • Themify
      • Mysite myway
    • Security
    • Developer
    • Teaching
    • Conference
    • Chat
  • Blog
  • About
  • Freelance
    • Plugins
    • Teaching
    • Need help?
    • CV og ref.
  • Contact

11 August - 2019 By Paal Joachim 4 Comments
Last updated on: August 11, 2019

I am redoing a client site – celias.no and also adding a WooCommerce minimum quantity drop down.

The goal:
Add a drop down with a minimum quantity and maximum quantity.
Begins with 10 then goes 10 steps at a time. 10, 20, 30 all the way up to 500.
Shop page: When clicking “Add to cart” will add the minimum of 10.

Celias-dugnads-kort-WooCommerce-shop

 

Product page: A drop down is available to select the quantity.

Celias-dugnads-kort-WooCommerce-product-page

 

The Cart page: Contains a drop down to easily change the quantity.

Celias-dugnadskort-WooCommerce-cart-page

The code used:
(Add the code to the child theme functions file.)

/** Initial code from: https://gist.github.com/kloon/6495019
As the code did not fully work I received help from Helga the Viking
with this gist: https://gist.github.com/helgatheviking/ff8792fbb12f5c5367c816b8a46c70ad
* Change the quantity input to select.
* @param array $args Args for the input.
* @param WC_Product|null $product Product.
* @param boolean $echo Whether to return or echo|string.
* @return string
*/
/* My custom version. Minimum quantity of 10. Max of 500. */
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' => '10',
'classes' => apply_filters( 'woocommerce_quantity_input_classes', array( 'input-text', 'qty', 'text' ), $product ),
'max_value' => apply_filters( 'woocommerce_quantity_input_max', 500, $product ),
'min_value' => apply_filters( 'woocommerce_quantity_input_min', 10, $product ),
'step' => apply_filters( 'woocommerce_quantity_input_step', 10, $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'], 10 );
$args['max_value'] = 10 < $args['max_value'] ? $args['max_value'] : 500;
// Max cannot be lower than min if defined.
if ( '' !== $args['max_value'] && $args['max_value'] < $args['min_value'] ) {
$args['max_value'] = $args['min_value'];
}
ob_start();
if ( $args['max_value'] && $args['min_value'] === $args['max_value'] ) {
echo '<div class="quantity hidden">
<input type="hidden" id="'. esc_attr( $args['input_id'] ) .'" class="qty" name="'. esc_attr( $args['input_name'] ) .'" value="'. esc_attr( $min_value ) .'" />
</div>';
} else {
/* translators: %s: Quantity. */
$label = ! empty( $args['product_name'] ) ? sprintf( esc_html__( '%s quantity', 'woocommerce' ), wp_strip_all_tags( $args['product_name'] ) ) : esc_html__( 'Quantity', 'woocommerce' );
echo '<div class="quantity">';
do_action( 'woocommerce_before_quantity_input_field' );
echo '<label class="screen-reader-text" for="'. esc_attr( $args['input_id'] ) .'">'. esc_attr( $label ) .'</label>';
$options = '';
for ( $count = $args['min_value']; $count <= $args['max_value']; $count = $count + $args['step'] ) {
$options .= '<option value="' . $count . '" '. selected( $args['input_value'], $count, false ) . '>' . $count . '</option>';
}
echo '<div class="quantity_select"><select name="' . esc_attr( $args['input_name'] ) . '" title="' . _x( 'Qty', 'Product quantity input tooltip', 'woocommerce' ) . '" class="qty">' . $options . '</select></div>';
do_action( 'woocommerce_after_quantity_input_field' );
echo '</div>';
}
if ( $echo ) {
echo ob_get_clean(); // WPCS: XSS ok.
} else {
return ob_get_clean();
}
}
/* Clicking "Add to Cart" in the Shop page added 1 quantity. As I have a minimum of 10 I had to add the following
code from Helga for it to work correctly. The following will add quantity of 10 to the cart. */
function kia_min_quantity( $args, $product ) {
$args['quantity'] = 10;
return $args;
}
add_filter( 'woocommerce_loop_add_to_cart_args', 'kia_min_quantity', 10, 2 );
// add_filter( 'woocommerce_quantity_input_min', 'kia_min_quantity', 10, 2 );
// Add a default value to all product page quantity dropdowns. Makes a check first to see that it is ! not in the cart.
function kia_default_quantity( $args, $product ) {
if( ! is_cart() ) {
$args['input_value'] = 30;
}
return $args;
}
add_filter( 'woocommerce_quantity_input_args', 'kia_default_quantity', 10, 2 );
// OR use this code: Add a different starting value to multiple product page quantity drop downs.
// Makes a check first to see that it is ! not in the cart.
function kia_default_quantity( $args, $product ) {
if( ! is_cart() ) {
if( 613 == $product->get_id() ) { // Condition: Only apply these arguments to Product ID of #613 Product 1.
$args['input_value'] = 70;
}
elseif ( 866 == $product->get_id() ) { // Condition: Only apply these arguments to Product ID of #866 Product 2.
$args['input_value'] = 60;
}
elseif ( 145 == $product->get_id() ) { // Condition: Only apply these arguments to Product ID of #145 Product 3.
$args['input_value'] = 50;
}
else $args['input_value'] = 30; // Condition: All other product ID's begin with the starting value of 30.
}
return $args;
}
add_filter( 'woocommerce_quantity_input_args', 'kia_default_quantity', 10, 2 );

view raw
functions.php
hosted with ❤ by GitHub

 

 

Share this:

  • Email

Categories: WooCommerce, WordPress

Paal Joachim Romdahl

I enjoy teaching and creating tutorials. As well creating web sites.
I help people gain WordPress knowledge through my easy to follow tutorials and specialized training. Contact me for more information on how I can improve your WordPress skills and to help get your web site quickly up and running.

Comments

  1. build royale says

    11 May - 2020

    Great post! I didn’t knowral of these resources and I’m going to go check them out now!

    Reply
  2. Bernd says

    3 February - 2020

    Man, thanks a lot for this 😉

    Instead of using a child theme I used the “Code Snippets” Plugin from the wp repository. It adds this snippets to functions.php without touching it.

    Reply
  3. bitcoin says

    29 September - 2019

    It was so helpful to me

    Reply
  4. mohamadrezateimouri says

    17 August - 2019

    thanks and very good

    Reply

Leave a Comment Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

© 2021 · By Easy Web Design Tutorials · Built on the Genesis Framework · WordPress · Log in · ⇪

loading Cancel
Post was not sent - check your email addresses!
Email check failed, please try again
Sorry, your blog cannot share posts by email.