WooCommerce add_to_cart元数据不坚持

时间:2015-04-15 20:32:06

标签: php wordpress woocommerce

我是一个WP noob,但在PHP中非常舒服。

我正在与客户合作,我们已经将产品定制工具构建为Angular.js单页面应用程序。当产品完成定制后,我们正在寻求将其注入WooCommerce购物车,以便客户可以退房。为此,我们将$ _POSTing数据发送到WP安装的根目录中的PHP文件。捕获它的代码如下:

require_once('./wp-load.php' );

global $woocommerce;

$woocommerce->session->set_customer_session_cookie(true);
$woocommerce->cart->empty_cart();
$id_arr = $_GET['productID'];
$pdfName = $_GET['pdfName'];

for($i=0; $i<count($id_arr); $i++){
  $id = $id_arr[$i];
  if ($id==0) continue;
  if ($i==0){
    $ret = $woocommerce->cart->add_to_cart($id, 1, '', '', array('pdfName'=>$pdfName));
  }else{
    $ret = $woocommerce->cart->add_to_cart($id);
  }
}

wp_redirect(site_url().'/cart/');

产品都已正确添加到购物车中,但在结帐后没有元数据的迹象。经过广泛的研究,我在这里找到了一篇文章:https://wpml.org/forums/topic/woocommerce-add-to-cart-does-not-work-with-wpml-activated/告诉我插件可能会导致这种行为。所以我有两个具体问题?

  1. 我的代码是否有意义,我是否正确创建了元数据数组?
  2. 在我这样做之前,我是否需要在WooCommerce中创建名为pdfName的东西?
  3. 是否有另一种方法可以将元数据添加到订单中 WooCommerce可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

看起来您正在正确添加元数据。但是,只要您刷新,WooCommerce就会重新创建购物车数据。因此,当从存储的会话中拉出购物车时,您必须告诉WooCommerce维护元数据。好吧,至少那是我对它的理解。因此,我认为您需要在$cart_item过滤器运行时过滤woocommerce_get_cart_item_from_session

add_filter( 'woocommerce_get_cart_item_from_session', 'so_29660316_get_cart_item_from_session', 11, 2 );

function so_29660316_get_cart_item_from_session( $cart_item, $values ) {

    if ( isset( $values['pdfName'] ) ) {
            $cart_item['pdfName'] = $values['pdfName'];
    }
    return $cart_item;
}