【问题标题】:WordPress WooCommerce - Add a variable product to cart using the WC_Cart classWordPress WooCommerce - 使用 WC_Cart 类将变量产品添加到购物车
【发布时间】:2019-10-31 22:36:05
【问题描述】:

我正在尝试将可变产品添加到 WordPress 插件 WooCommerce 的购物车中。

到目前为止,我已经能够添加单一/简单的产品:

$woocommerce->cart->add_to_cart( [product_id], [quantity] );

但是,查看 WC_Class 中的函数签名:

function add_to_cart( $product_id, $quantity = 1, $variation_id = '', $variation = '', $cart_item_data = array() ) {

我们可以清楚地看到该函数允许输入variation_id。

我已经尝试过各种空值和整数的组合:

$woocommerce->cart->add_to_cart( 24, 1, 28, null, null ); 

等等都无济于事。

我还尝试了我自己的 hacky 方法,试图重新创建 WooCommerce 自己的产品页面执行的发布事件,但同样没有运气。

<a id="buy_v" href="#">Buy Variable Product !</a>    
<script>    
   $('#buy_v').click(function(e) {
      e.preventDefault();
      addToCartV(24,26,'Red',1);
      return false;
   });    
   function addToCartV(p_id, v_id, c, q) {    
    $.ajax({
      type: 'POST',
      url: '/wp/?product=tee1&add-to-cart=variation&product_id='+p_id,
      data: { 'attribute_colour': c,
              'variation_id':  v_id,
              'quantity':  q,
              'product_id':  p_id},
      success: function(response, textStatus, jqXHR){
            // log a message to the console
            console.log("It worked!");
        }/*,
      dataType: 'JSON'*/
    });    
   }   
</script>

谁能建议我哪里出错了?谢谢。

【问题讨论】:

  • 嗨。我正在尝试构建一个像上面一样的 ajax 变体添加到购物车。我检查了 woocommerce 代码进出,但我想更好地了解 url var 结构/可能性/选项。我的意思是:?product=tee1&amp;add-to-cart=variation&amp;product_id > 你是否有我可以传递到那里的所有变量和值类型的“映射”?

标签: php wordpress


【解决方案1】:

上述两个示例实际上都可以正常工作,只是它们无法在 WooCommerce 自己的购物车中正确显示。

为了使它们正确显示,为第四个参数传入一个数组,该参数似乎代表 WooCommerce 自己的购物车中的变化:

$arr = array();
$arr['Color'] = 'Green';
$woocommerce->cart->add_to_cart( 24, 1, 28, $arr, null ); 

【讨论】:

  • 只需添加$arr[] 应该具有页面提供的字段,例如:大小:$arr["atribute_pa_size"] = "1kg" 在 kvp(键值对)中
  • 之前我只使用了产品 ID、数量和变体 ID。我将产品添加到购物车,但没有显示购物车、结帐和订单的变化。这是正确的方法。
【解决方案2】:

对于其他尝试类似事情的人,这是我的方法。

我创建了一个通过 ajax 调用的脚本,其中包含以下内容:

<?php
require_once("../../../wp-blog-header.php");
header("HTTP/1.1 200 OK");
global $woocommerce;

$quantity       = (isset($_REQUEST['qty'])) ? (int) $_REQUEST['qty'] : 1;
$product_id     = (int) apply_filters('woocommerce_add_to_cart_product_id', $_REQUEST['pid']);   
$vid            = (int) apply_filters('woocommerce_add_to_cart_product_id', $_REQUEST['vid']);   

if ($vid > 0) $woocommerce->cart->add_to_cart( $product_id, $quantity, $vid );         
else $woocommerce->cart->add_to_cart( $product_id, $quantity );    

这成功地将产品变体添加到购物车

【讨论】:

  • 通常情况下,您应该使用 ajaxurl JS 变量来获取 ajax.php 文件的位置并将 ajax 请求发送到该文件。
猜你喜欢
  • 2014-11-21
  • 2011-12-19
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
相关资源
最近更新 更多