我是一个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/告诉我插件可能会导致这种行为。所以我有两个具体问题?
答案 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;
}