允许客户在Woocommerce产品上全局设置产品数量

时间:2018-03-22 11:56:33

标签: php jquery wordpress woocommerce product

我将woocommerce用于我的餐饮初创公司。我与为客户订购午餐的公司合作,他们必须为每个人选择相同的产品。因此,所有产品的数量都是相同的。

例如,一群30人需要三明治,苏打水和水果=> 30个三明治+30个苏打水+30个水果。

这是一种在进入商店时设置组大小的方法,所以数量会自动设置吗?

1 个答案:

答案 0 :(得分:1)

以下代码将允许客户通过自定义表单为短代码设置所有产品的特定数量产品数量...这样您就可以将其显示在您想要的位置,并且您将得到:

enter image description here

一旦客户设定了他的数量,他将被重定向到商店页面,他将收到一条自定义消息的通知:

enter image description here

在每个单品上;你会有类似的东西:

enter image description here

客户可以更改此数量或重置它......以下是代码:

// Shortcode with form fields for quantity
if( ! function_exists('set_bulk_product_quantity') ) {
    function set_bulk_product_quantity() {
        $bulk_qty = WC()->session->get( 'bulk_qty' );
        if( empty($bulk_qty) )
            $bulk_qty = '0';

        $label_name    = __('Set Products minimal Bulk Quantity ', 'woocommerce');
        $submit_button = __('Set quantity', 'woocommerce');
        $reset_button  = __('Reset', 'woocommerce');
        $style         = 'style="max-width:80px;text-align:right"';

        return '<form id="bulk_qty" method="post" action="">
        <p class="form-row form-row-wide" id="bulk_product_quantity_field">
            <label for="bulk_qty">'.$label_name.'</label>
            <input type="number" class="input-text qty text" name="bulk_qty" '.$style.' value="'.$bulk_qty.'">
            <input type="submit" class="button alt" name="bulk_qty_submit" id="bulk_qty_submit" value="'.$submit_button.'">
            <input type="reset" class="button alt" id="bulk_qty_reset" value="'.$reset_button.'">
        </p>
        </form>
        <script type="text/javascript">
            jQuery(function($){
                if( $("input[name=bulk_qty]").val() == "")
                    $("input[name=bulk_qty]").attr("value", "0");;
                $("#bulk_qty_reset").click( function(){
                    console.log($("input[name=bulk_qty]").val());
                    $("input[name=bulk_qty]").attr("value", "0");
                    $("form#bulk_qty").submit();
                });
            });
        </script>';
        }
    add_shortcode( 'bulk_qty', 'set_bulk_product_quantity' );
}



// Setting the bulk quantity in session data, displaying the notice and redirecting to shop
add_action( 'template_redirect', 'special_bulk_product_quantity' );
function special_bulk_product_quantity() {
    if ( isset($_POST['bulk_qty']) ){
        $bulk_qty = sanitize_text_field( trim($_POST['bulk_qty']) );
        if( $bulk_qty == 0 ){
            $qty_display = $bulk_qty;
            $bulk_qty = '';
        } else {
            $qty_display = $bulk_qty;
        }
        // Set the quantity value in customer WC_Sessions
        WC()->session->set( 'bulk_qty', $bulk_qty );

        // Add and display a custom notice (message)
        wc_add_notice( __('The bulk quantity is now set to ', 'woocommerce') . $qty_display, 'notice' );

        // Redirect to shop page
        wp_redirect( get_permalink( wc_get_page_id( 'shop' ) ) );
        exit(); // always exit at the end
    }
}


// Setting the bulk quantity amount in all products
add_filter( 'woocommerce_quantity_input_args', 'custom_quantity_input_args', 10, 2 );
function custom_quantity_input_args( $args, $product ) {
    if( ! is_cart() ){
        $bulk_qty = WC()->session->get( 'bulk_qty' );

        if( ! empty($bulk_qty) ) {
            $args['input_value'] = $bulk_qty; // Start from this value (default = 1)
            // $args['min_value']   = 20; // Min value (default = 0)
            // $args['max_value']   = -1; // Min value (default = 0)
        }
    }
    return $args;
}

代码放在活动子主题(或主题)的function.php文件中。经过测试和工作。

  

使用短代码:

     
      
  • 在Wordpress页面或帖子编辑器上,只需使用:[bulk_qty]
  •   
  • 在PHP代码上使用:echo do_shortcode("[bulk_qty]");
  •