autoship_scheduled_order_quantity_input (function)
( src/scheduled-orders.php) Mimics the WooCommerce 'woocommerce_quantity_input' filter and is used to output the quantity input for Customer Native UI Scheduled Orders display. It takes (WC quantity input) $args (array), (Autoship Cloud) $product (obj), $wc_product, and $echo (bool) as its parameters and will either echo or return the quantity display.
Function
/**
* Output the quantity input for Autoship Scheduled Order Edit form.
* Mimics the WC {@see woocommerce_quantity_input} function but deals with autoship specific.
*
* @param array $args Args for the input.
* @param stdClass $product Autoship Product Object.
* @param WC_Product|null $wc_product Product.
* @param boolean $echo Whether to return or echo|string.
*
* @return string
*/
function autoship_scheduled_order_quantity_input( $args, $product, $wc_product, $echo = true ){
if ( null !== $wc_product ){
$defaults = array(
'input_id' => uniqid( 'quantity_' ),
'input_name' => 'quantity',
'input_value' => '1',
'max_value' => apply_filters( 'woocommerce_quantity_input_max', -1, $wc_product ),
'min_value' => apply_filters( 'woocommerce_quantity_input_min', 0, $wc_product ),
'step' => apply_filters( 'woocommerce_quantity_input_step', 1, $wc_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 ), $wc_product );
} else {
$defaults = array(
'input_id' => uniqid( 'quantity_' ),
'input_name' => 'quantity',
'input_value' => '1',
'max_value' => apply_filters( 'autopship_scheduled_order_quantity_input_max', -1, $product ),
'min_value' => apply_filters( 'autopship_scheduled_order_quantity_input_min', 0, $product ),
'step' => apply_filters( 'autopship_scheduled_order_quantity_input_step', 1, $product ),
'pattern' => apply_filters( 'autopship_scheduled_order_quantity_input_pattern', '[0-9]*' ),
'inputmode' => apply_filters( 'autopship_scheduled_order_quantity_input_inputmode', 'intval' ),
);
$args = apply_filters( 'autoship_scheduled_order_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 );
$args['max_value'] = 0 < $args['max_value'] ? $args['max_value'] : '';
// 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'] ) {
?>
<div class="quantity hidden">
<input type="hidden" id="<?php echo esc_attr( $args['input_id'] ); ?>" class="qty" name="<?php echo esc_attr( $args['input_name'] ); ?>" value="<?php echo esc_attr( $args['min_value'] ); ?>" />
</div>
<?php
} else {
/* translators: %s: Quantity. */
$labelledby = ! empty( $args['product_name'] ) ? sprintf( __( '%s quantity', 'autoship' ), strip_tags( $args['product_name'] ) ) : '';
?>
<div class="quantity">
<label class="screen-reader-text" for="<?php echo esc_attr( $args['input_id'] ); ?>"><?php esc_html_e( 'Quantity', 'autoship' ); ?></label>
<input
type="number"
id="<?php echo esc_attr( $args['input_id'] ); ?>"
class="input-text qty text"
step="<?php echo esc_attr( $args['step'] ); ?>"
min="<?php echo esc_attr( $args['min_value'] ); ?>"
max="<?php echo esc_attr( 0 < $args['max_value'] ? $args['max_value'] : '' ); ?>"
name="<?php echo esc_attr( $args['input_name'] ); ?>"
value="<?php echo esc_attr( $args['input_value'] ); ?>"
title="<?php echo esc_attr_x( 'Qty', 'Product quantity input tooltip', 'autoship' ); ?>"
size="4"
pattern="<?php echo esc_attr( $args['pattern'] ); ?>"
inputmode="<?php echo esc_attr( $args['inputmode'] ); ?>"
aria-labelledby="<?php echo esc_attr( $labelledby ); ?>" />
</div>
<?php
}
$input_display = apply_filters( 'autoship_scheduled_order_quantity_input_display', ob_get_clean() , $args, $product, $wc_product, $echo );
if ( $echo ) {
echo $input_display;
} else {
return $input_display;
}
}