Wordpress Woocommerce-can';是否不使用快速订购单页店铺作为客人添加到购物车?

Wordpress Woocommerce-can';是否不使用快速订购单页店铺作为客人添加到购物车?,wordpress,woocommerce,Wordpress,Woocommerce,使用插件@ 看起来,如果我作为管理员的普通用户登录,我就可以很好地将项目添加到购物车中。但是,如果我以来宾身份添加到购物车,它会执行ajax请求并返回“1”,但该项目从未添加到购物车 有人知道为什么会这样吗?我在网站上停用的另外两个插件仍然可以复制,所以我相信这是这个插件中的一个bug 编辑:我确认应用了“客人可以结帐”设置框,所以似乎不是这样 编辑#2:以下是添加到购物车fn: function wqo_add_prod(pid,vid){ var qty= jQuery('#pr

使用插件@

看起来,如果我作为管理员的普通用户登录,我就可以很好地将项目添加到购物车中。但是,如果我以来宾身份添加到购物车,它会执行ajax请求并返回“1”,但该项目从未添加到购物车

有人知道为什么会这样吗?我在网站上停用的另外两个插件仍然可以复制,所以我相信这是这个插件中的一个bug

编辑:我确认应用了“客人可以结帐”设置框,所以似乎不是这样

编辑#2:以下是添加到购物车fn:

  function wqo_add_prod(pid,vid){
    var qty= jQuery('#product_qty_'+vid).val();
    if(qty==0){
      jQuery('#wqo_alert_info').text('Out of Stock');
      jQuery('#wqo_alert_info').show()
      setTimeout(function(){jQuery('#wqo_alert_info').hide()}, 1500);      
      return false;
    }
    if(vid==0){
      qty= jQuery('#product_qty_'+pid).val();
    }

    var ajax_url = 'http://DOMAIN.com/wp-admin/admin-ajax.php';
        jQuery.ajax({
          type: "POST",
          url:ajax_url,
              data : {
                  'action':          'wqo_addtocart',
                  'wqo_prod_id':     pid,
                  'wqo_prod_var_id': vid,
                  'wqo_prod_qty':    qty
          },
          success: function(response){            
            if(response==1){
              jQuery('#wqo_alert_info').text('Added to your cart');
            }else{
              jQuery('#wqo_alert_info').text(response);
            }

            jQuery.ajax({
              type: "POST",
              url:ajax_url,
              data : {'action': 'wqo_cart_amount'},
              success: function(data){             
                jQuery('#wqo_cart_price').html(data);
              }
            });

             jQuery('#wqo_alert_info').show()
             setTimeout(function(){jQuery('#wqo_alert_info').hide()}, 2000);          
          }
        });
  }
编辑#3:php回调的源代码

function wqo_addtocart() {
  global $woocommerce;
  $vid=$_POST['wqo_prod_var_id'];
  $pid=$_POST['wqo_prod_id'];
  $vid=$_POST['wqo_prod_var_id'];
  $pqty=$_POST['wqo_prod_qty'];

  if($vid==0){
    $product = WC_Product_Factory::get_product($pid);    
  }else{
    $product = WC_Product_Factory::get_product($vid);    
  }
  $stock=$product->get_stock_quantity();
  $availability = $product->get_availability();

  if($availability['class']=='out-of-stock'){
    echo 'Out of stock';
    exit;
  }

  if($stock!=''){
        foreach($woocommerce->cart->cart_contents as $cart_item_key => $values ) {
        $c_item_id='';
        $c_stock='';
        if($values['variation_id']!=''){
          $c_item_id=$values['variation_id'];
        }else{
          $c_item_id=$values['product_id'];
        }
        $c_stock=$values['quantity']+$pqty;

        if($vid==0 && $pid==$c_item_id && $c_stock>$stock){
          $product = WC_Product_Factory::get_product($pid);
          echo 'You have cross the stock limit';
          exit;
        }else if($vid==$c_item_id && $c_stock>$stock){
          $product = WC_Product_Factory::get_product($vid);
          echo 'You have cross the stock limit';
          exit;
        }        
       }    
  }

  if($vid==0){
    $z=$woocommerce->cart->add_to_cart($pid,$pqty,null, null, null );
  }else{    
    $z=$woocommerce->cart->add_to_cart($pid, $pqty, $vid, $product->get_variation_attributes(),null);
  }
  echo '1';

  exit;
}
woo quick order/includes/wqo view.php的底部注册(也在上述FN被盗的地方)

编辑4:我认为这是一个会议问题。在调用
wqo\u addtocart
的第一个ajax调用中,如果我这样做:

var\u转储($woocommerce->cart->cart\u内容)

它返回数组,主键是
$z
返回的哈希

但是,在第二个ajax请求中,这将丢失:

 59 function wqo_cart_amount(){
 60   global $woocommerce;
 61   var_dump($woocommerce->cart->cart_contents);
 62   echo $woocommerce->cart->get_cart_total();
 63   exit;
 64 }
这将返回一个空数组。因此,在第一次和第二次ajax请求之间,它会丢失。

答案是:)

WooCommerce对“添加到购物车”功能进行了一些更改 问题在于:

正确的代码应该是:

if ( did_action( 'wp' ) || defined( 'DOING_AJAX' ) ) {
    $this->set_cart_cookies( sizeof( $this->cart_contents ) > 0 );
}

我们可以看到hook
wp\uajax\uwqo\uaddtocart
?这是当您单击add_to_cart时调用的函数button@XcID-我添加了JS回调,但我认为这是标准的,不是定制的。试图找到那个,但没看到。只是对它的引用<代码>676添加操作(“wp_ajax_wqo_addtocart”、“wqo_addtocart”)
对于第一次调用,它以
1
响应,顺便说一句,这意味着成功,但购物车数量甚至没有更新。有一些代码行可以接受更新,但我没有立即在回调中看到任何限制登录用户使用功能的内容。在他们的演示站点上,我能够将项目添加到购物车中,因此问题仍然是特定于您的设置的。您是否已禁用所有插件?切换到默认主题如何?能否尝试修改回调:用
echo($z?'1':'0')
替换
echo'1'
,ajax调用的响应是什么?谢谢,我的朋友有这个问题,但您的代码解决了它。美好的
// Hook after add to cart
add_action( 'woocommerce_add_to_cart' , 'repair_woocommerce_2_2_8_session_add_to_cart');

function repair_woocommerce_2_2_8_session_add_to_cart( ){
    if ( defined( 'DOING_AJAX' ) ) {
        wc_setcookie( 'woocommerce_items_in_cart', 1 );
        wc_setcookie( 'woocommerce_cart_hash', md5( json_encode( WC()->cart->get_cart() ) ) );
        do_action( 'woocommerce_set_cart_cookies', true );
    }
}
if ( did_action( 'wp' ) || defined( 'DOING_AJAX' ) ) {
    $this->set_cart_cookies( sizeof( $this->cart_contents ) > 0 );
}