仅当特定数量时,Woocommerce购物车结帐

时间:2018-02-08 14:11:49

标签: php wordpress woocommerce

在Woocommerce中,我希望我的客户购买18或36种产品,但不能购买两种产品。我想取消从19点到35点退房的可能性。

1 个答案:

答案 0 :(得分:1)

你在评论中告诉我你不熟悉php。大多数时候我们不提供PHP代码,但我发现它很有趣。它可能会在将来帮助一些人。

正如我所说,如果客户没有 18 36 产品,则可能会在结帐页面上重定向到购物车页面。在购物车页面上重定向后,您必须显示一条消息,告知客户他必须拥有 18 36 产品。

摘要

    add_action
  • template_redirect检查产品计数并处理重定向。如果我们重定向,请在网址中添加invalid-cart-product-count之类的参数,其值等于产品数
  • {li} add_action woocommerce_before_cart检查我们是否收到了invalid-cart-product-count,以便我们显示一条消息。

工作代码(已测试)

您需要将代码放在主题或子主题的functions.php文件中(首选选项)。

/**
 * Check on template redirect the cart product count
 */
add_action('template_redirect','product_count_template_redirect');
function product_count_template_redirect() {

    // If we are on checkout and the cart contents count is not equal to 18 or 36
    if(is_checkout() && !in_array(WC()->cart->get_cart_contents_count(), array(18, 36))) {

        // Redirect on the cart page and add a query arg to the url so we can check for it and add a message
        wp_redirect(esc_url(add_query_arg('invalid-cart-product-count', WC()->cart->get_cart_contents_count(), wc_get_cart_url())));
        exit;
    }
}

/**
 * Handle the message on the cart page if we have the 'invalid-cart-product-count' arg in url
 */
add_action('woocommerce_before_cart', 'cart_page_message');
function cart_page_message() {

    // If its set and not empty
    if(!empty($_GET['invalid-cart-product-count'])) {

        // Display the message with the current cart count and the count that user need to have
        $message = "<div class='woocommerce-error'>";
        $message .= sprintf(
            __('You currently have <strong>%s</strong> products in your cart. You must have <strong>18</strong> or <strong>36</strong> products in your cart to be able to checkout', 'your-text-domain'),
            // Force the arg to be an int, if someone malicious change it to anything else 
            (int) $_GET['invalid-cart-product-count']
        );
        $message .= "</div>";

        echo $message;
    }
}

告诉我你是否理解,或者这不完全是你需要的。