我认为这段代码应该有效,但不能确定放置它的位置。到目前为止,我尝试过的任何地方都失败了......
add_action('init', 'woocommerce_clear_cart');
function woocommerce_clear_cart() {
global $woocommerce, $post, $wpdb;
$url = explode('/', 'http://'.$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
$slug=$url[4];
$postid = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_status='publish' AND post_name = '$slug'");
if ($postid){
if ($postid == PRODUCTID1 || $postid == PRODUCTID2){
$woocommerce->cart->empty_cart();
}
}
}
答案 0 :(得分:38)
不幸的是,没有'行动'在WooCommerce将商品添加到购物车之前挂钩。但他们有一个过滤器'在添加到购物车之前挂钩。 这就是我使用它的方式:
add_filter( 'woocommerce_add_cart_item_data', 'woo_custom_add_to_cart' );
function woo_custom_add_to_cart( $cart_item_data ) {
global $woocommerce;
$woocommerce->cart->empty_cart();
// Do nothing with the data and return
return $cart_item_data;
}
答案 1 :(得分:14)
根据接受的答案和最新的Woo版本2.5.1,我使用类wc-checkout.php中的代码来更新函数,使其更加清晰
add_filter( 'woocommerce_add_cart_item_data', '_empty_cart' );
function _empty_cart( $cart_item_data ) {
WC()->cart->empty_cart();
return $cart_item_data;
}
答案 2 :(得分:10)
来自我的answer on another question:
是过滤器/挂钩,在项目添加到购物车之前运行,因为每个产品在添加之前都经过验证。
因此,在验证产品时,我们可以检查项目是否已经存在购物车中的商品并清除(如果能够添加当前商品)并添加错误消息。
/**
* When an item is added to the cart, remove other products
*/
function so_27030769_maybe_empty_cart( $valid, $product_id, $quantity ) {
if( ! empty ( WC()->cart->get_cart() ) && $valid ){
WC()->cart->empty_cart();
wc_add_notice( 'Whoa hold up. You can only have 1 item in your cart', 'error' );
}
return $valid;
}
add_filter( 'woocommerce_add_to_cart_validation', 'so_27030769_maybe_empty_cart', 10, 3 );
答案 3 :(得分:5)
这对我来说就像一个魅力,删除了以前的产品,并添加了新的产品配置。干杯
更新:适用于WooCommerce 3.0.X
function check_if_cart_has_product( $valid, $product_id, $quantity ) {
if(!empty(WC()->cart->get_cart()) && $valid){
foreach (WC()->cart->get_cart() as $cart_item_key => $values) {
$_product = $values['data'];
if( $product_id == $_product->get_id() ) {
unset(WC()->cart->cart_contents[$cart_item_key]);
}
}
}
return $valid;
}
add_filter( 'woocommerce_add_to_cart_validation', 'check_if_cart_has_product', 10, 3 );
对于低于3.0.X的WooCommerce版本
function check_if_cart_has_product( $valid, $product_id, $quantity ) {
if(!empty(WC()->cart->get_cart()) && $valid){
foreach (WC()->cart->get_cart() as $cart_item_key => $values) {
$_product = $values['data'];
if( $product_id == $_product->id ) {
unset(WC()->cart->cart_contents[$cart_item_key]);
}
}
}
return $valid;
}
add_filter( 'woocommerce_add_to_cart_validation', 'check_if_cart_has_product', 10, 3 );
答案 4 :(得分:4)
您有两种选择:
functions.php
主题文件add_filter ( 'woocommerce_before_cart' , 'allow_single_quantity_in_cart' ); function allow_single_quantity_in_cart() { global $woocommerce; $cart_contents = $woocommerce->cart->get_cart(); $keys = array_keys ( $cart_contents ); foreach ( $keys as $key ) { $woocommerce->cart->set_quantity ( $key, 1, true ); } }
答案 5 :(得分:3)
不要将功能直接添加到您的商务文件中...您在更新时将丢失所有代码。
用户函数应始终通过主题的functions.php挂钩。
答案 6 :(得分:2)
试试这个,
要从购物车中删除所有商品并添加最后添加的商品,
//For removing all the items from the cart
global $woocommerce;
$woocommerce->cart->empty_cart();
$woocommerce->cart->add_to_cart($product_id,$qty);
类文件为wp-content/plugins/woocommerce/classes/class-wc-cart.php
。
您可以在functions.php。
中的添加到购物车功能中添加上述代码希望它的作品......
答案 7 :(得分:2)
如果您想将产品数量限制为1:
function check_if_cart_has_product( $valid, $product_id, $quantity ) {
if(!empty(WC()->cart->get_cart()) && $valid){
foreach (WC()->cart->get_cart() as $cart_item_key => $values) {
$_product = $values['data'];
if( $product_id == $_product->id ) {
wc_add_notice( 'The product is already in cart', 'error' );
return false;
}
}
}
return $valid;
}
add_filter( 'woocommerce_add_to_cart_validation', 'check_if_cart_has_product', 10, 3 );
答案 8 :(得分:1)