在Woocommerce中,我希望我的客户购买18或36种产品,但不能购买两种产品。我想取消从19点到35点退房的可能性。
答案 0 :(得分:1)
你在评论中告诉我你不熟悉php。大多数时候我们不提供PHP代码,但我发现它很有趣。它可能会在将来帮助一些人。
正如我所说,如果客户没有 18 或 36 产品,则可能会在结帐页面上重定向到购物车页面。在购物车页面上重定向后,您必须显示一条消息,告知客户他必须拥有 18 或 36 产品。
add_action
上template_redirect
检查产品计数并处理重定向。如果我们重定向,请在网址中添加invalid-cart-product-count
之类的参数,其值等于产品数。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;
}
}
告诉我你是否理解,或者这不完全是你需要的。