简体   繁体   English

在 WooCommerce 中为特定产品或类别设置最小订单金额

[英]Set minimum Order amount for specific Products or Categories in WooCommerce

I've searched extensively to see if other folks had this situation and received an answer with no luck.我已经广泛搜索,看看其他人是否有这种情况,但没有运气就得到了答案。

Essentially, I have two items customers can add to their cart.本质上,我有两个项目客户可以添加到他们的购物车中。 I want to make it so they cannot checkout with either of those items if their subtotal is not $15 or more.我想这样做,如果他们的小计不是 15 美元或更多,他们就无法结账。

Having the ability to just drop their IDs into the code would be fine.能够将他们的 ID 放入代码中就好了。 Or, I can assign them to the same category and set this minimum by category.或者,我可以将它们分配到同一类别并按类别设置此最小值。

So far all I have is the basic PHP that sets a universal minimum.到目前为止,我所拥有的只是设置通用最小值的基本 PHP。 I just need some help figuring out how to limit this to meet my needs.我只需要一些帮助来弄清楚如何限制它以满足我的需求。

I'm a designer not a dev, so any help is much appreciated.我是设计师而不是开发人员,因此非常感谢任何帮助。

    // Set a minimum dollar amount per order
add_action( 'woocommerce_check_cart_items', 'spyr_set_min_total' );
function spyr_set_min_total() {
    // Only run in the Cart or Checkout pages
    if( is_cart() || is_checkout() ) {
        global $woocommerce;

        // Set minimum cart total
        $minimum_cart_total = 10;

        // Total we are going to be using for the Math
        // This is before taxes and shipping charges
        $total = WC()->cart->subtotal;

        // Compare values and add an error is Cart's total
        // happens to be less than the minimum required before checking out.
        // Will display a message along the lines of
        // A Minimum of 10 USD is required before checking out. (Cont. below)
        // Current cart total: 6 USD 
        if( $total <= $minimum_cart_total  ) {
            // Display our error message
            wc_add_notice( sprintf( '<strong>A Minimum of %s %s is required before checking out.</strong>'
                .'<br />Current cart\'s total: %s %s',
                $minimum_cart_total,
                get_option( 'woocommerce_currency'),
                $total,
                get_option( 'woocommerce_currency') ),
            'error' );
        }
    }
}

2020 Update 2020 更新

Setting minimum value for some products categories or products ID's in cart for Cart and Checkout pages only.仅为购物车和结帐页面设置购物车中某些产品类别或产品 ID 的最小值。

This untested snippet made of this and this from wooThemes, and this too :这个未经测试的片段由来自 wooThemes 的这个这个组成,还有这个

add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' );
add_action( 'woocommerce_before_cart' , 'wc_minimum_order_amount' );
 
function wc_minimum_order_amount() {
    ##  SETTINGS  ##
    $minimum_amount = 50; // Define a minimum order amount
    $category_ids   = array( 17, 18 ); // Define your category ids in the array (or an empty array to disable)
    $product_ids    = array( 64, 67, 78 ); // Define your product ids in the array (or an empty array to disable)

    // Only on cart or checkout pages
    if( WC()->cart->is_empty() || ! ( is_cart() || is_checkout() ) ) 
        return; // Exit

    $total_amount = WC()->cart->subtotal; // Items subtotal including taxes

    if ( $total_amount < $minimum_amount ) {
        $needs_minimum_amount = false; // Initializing

        // Loop through cart items
        foreach ( WC()->cart->get_cart() as $cart_item ) {
            $product_id   = $cart_item['product_id'];
            $variation_id = $cart_item['variation_id'];
            
            // 1. Check for matching product categories
            if( sizeof($category_ids) > 0 ) {
                $taxonomy = 'product_cat';

                if ( has_term( $category_ids, $taxonomy, $product_id ) ) { 
                    $needs_minimum_amount = true;
                    break; // Stop the loop
                }
            }

            // 2. Check for matching product Ids
            if( sizeof($product_ids) > 0 ) {
                if ( array_intersect( $product_ids, array($product_id, $variation_id) ) ) { 
                    $needs_minimum_amount = true;
                    break; // Stop the loop
                }
            }
        }

        if( $needs_minimum_amount ) {
            wc_print_notice( sprintf( 
                __("You must have an order with a minimum of %s to place your order. Your current order total is %s."), 
                wc_price( $minimum_amount ), 
                wc_price( $total_amount )
            ), 'error' );
        }
    }
}

Code goes in functions.php file of your active child theme (active theme).代码位于您的活动子主题(活动主题)的 functions.php 文件中。 Tested and works.测试和工作。

You can set your categories ID's, your products ID's and the minimum order value amount.您可以设置类别 ID、产品 ID 和最小订单金额。


— — … I mportant … N ote … — — — — ……我很重要……注意…… — —

This hooks are working for messages.此挂钩适用于消息。 But to avoid users from clicking you need to add Javascript/jQuery and maybe with ajax too (client side detection).但是为了避免用户点击,您需要添加 Javascript/jQuery,也可能使用 ajax(客户端检测)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM