Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数量超过1时,Woocommerce中的独立购物车项目_Php_Wordpress_Woocommerce_Checkout_Hook Woocommerce - Fatal编程技术网

Php 数量超过1时,Woocommerce中的独立购物车项目

Php 数量超过1时,Woocommerce中的独立购物车项目,php,wordpress,woocommerce,checkout,hook-woocommerce,Php,Wordpress,Woocommerce,Checkout,Hook Woocommerce,我使用的是“”应答码,如果您使用的是购物车,它会非常有效 但在我的例子中,我将人们直接重定向到收银台,因此它与收银台底部的购物车简历的工作方式不同。此外,当产品多次添加到购物车时,它不会提供单独的项目。以下代码还将处理ajax添加到购物车以及多次添加相同项目(+跳转购物车重定向到结帐): //按数量单位拆分项目 添加操作(“添加到购物车”、“按数量拆分购物车项目”,10,6); 函数按数量拆分购物车项目($cart\u item\u key、$product\u id、$quantity、$va

我使用的是“”应答码,如果您使用的是购物车,它会非常有效


但在我的例子中,我将人们直接重定向到收银台,因此它与收银台底部的购物车简历的工作方式不同。此外,当产品多次添加到购物车时,它不会提供单独的项目。

以下代码还将处理ajax添加到购物车以及多次添加相同项目(+跳转购物车重定向到结帐):

//按数量单位拆分项目
添加操作(“添加到购物车”、“按数量拆分购物车项目”,10,6);
函数按数量拆分购物车项目($cart\u item\u key、$product\u id、$quantity、$variation\u id、$variation、$cart\u item\u data){
如果($quantity==1)返回;
//保留产品,但将其数量设置为1
WC()->cart->set_数量($cart_item_key,1);
//循环检查每个项目数量单位
对于($i=1;$i购物车->将商品添加到购物车($product\u id,1,$variation\u id,$variation,$cart\u item\u data);
}
}
//使添加的购物车项目成为唯一且独立的项目(也可与ajax一起添加到购物车)
添加过滤器('woocommerce\u add\u cart\u item\u data','filter\u add\u cart\u item\u data',10,4);
函数过滤器\添加\购物车\项目\数据($cart\项目\数据,$product\ id,$variation\ id,$quantity){
如果(!isset($cart\u item\u data['unique\u key'])){
//使此项目独一无二
$cart_item_data['unique_key']=md5(microtime().rand()“Hi Dad!”);
}
返回$cart\u item\u数据;
}
//重定向到结帐跳转购物车
添加操作(“模板重定向”、“购物车重定向到结帐”);
功能购物车\u重定向\u至\u签出(){
if(is_cart()){
wp_safe_重定向(wc_get_checkout_url());
退出();
}
}
代码放在活动子主题(或活动主题)的function.php文件中。已测试并运行

此代码添加了对以下内容的支持:

  • 将Ajax添加到购物车项目中
  • 多次向购物车添加相同的产品

基于:

我明白了,老实说,这不是一个代码,使用一个禁用购物车的插件,它会自动重定向到购物车页面。所讨论的插件是Wait。我怎么会这么笨。我没有阅读插件的完整描述,它说它不允许添加多个项目。如果我禁用插件,它会工作很好..所以我想现在的问题是..当你向购物车添加内容时,我如何做到这一点?它会直接重定向到购物车,而购物车不是一个有效页面,因此它总是重定向到签出。我使用这个添加过滤器(“添加到购物车”“重定向到签出”);函数重定向到签出(){global$woocommerce;$checkout\u url=$woocommerce->cart->get\u checkout\u url();return$checkout\u url;}不确定如何解决这篇文章,这显然要感谢你..因为如果我们总是更新购物车页面中的数量,它将不起作用。当购物车页面上的数量发生变化时,我们如何处理这段代码?
// Split items by their quantity units
add_action( 'woocommerce_add_to_cart', 'split_cart_items_by_quantity', 10, 6 );
function split_cart_items_by_quantity( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ) {
    if ( $quantity == 1 ) return;

    // Keep the product but set its quantity to 1
    WC()->cart->set_quantity( $cart_item_key, 1 );

    // Loop through each unit of item quantity
    for ( $i = 1; $i <= $quantity -1; $i++ ) {
        // Make each quantity item unique and separated
        $cart_item_data['unique_key'] = md5( microtime() . rand() . "Hi Mom!" );

        // Add each item quantity as a separated cart item
        WC()->cart->add_to_cart( $product_id, 1, $variation_id, $variation, $cart_item_data );
    }
}

// Make added cart item as a unique and separated (works with ajax add to cart too)
add_filter( 'woocommerce_add_cart_item_data', 'filter_add_cart_item_data', 10, 4 );
function filter_add_cart_item_data( $cart_item_data, $product_id, $variation_id, $quantity ) {
    if ( ! isset($cart_item_data['unique_key']) ) {
        // Make this item unique
        $cart_item_data['unique_key'] = md5( microtime().rand() . "Hi Dad!"  );
    }
    return $cart_item_data;
}

// Redirect to checkout jumping cart
add_action( 'template_redirect', 'cart_redirect_to_checkout' );
function cart_redirect_to_checkout(){
    if( is_cart() ){
        wp_safe_redirect( wc_get_checkout_url() );
        exit();
    }
}