在 add_to_cart
函数期间,有一个用于添加 “购物车商品数据” 的过滤器。该过滤器为 woocommerce_add_cart_item_data
。我希望将我的自定义插件数据存储在其中,以便相对于商品存储数据,并且可以添加具有不同数据的多个产品。
这似乎都起作用了,但是我无法检索数据。我无法弄清楚。 数据是存在的,我可以在序列化字符串中看到它,但我无法提取它。
echo '<pre>';
var_dump( WC() );
foreach( WC()->cart->get_cart() as $cart_item ) {
var_dump( $cart_item );
var_dump( WC()->cart->get_item_data( $cart_item ) );
}
echo '</pre>';
WC()
的第一次转储具有属性:session->_data->cart->(序列化数据)
。然而,_data属性是受保护的,但我可以在序列化数据中看到我的自定义字段。
$cart_item是一个带有product_id
和其他一些数据的数组,但它不包括我的自定义数据:(
最后,使用get_item_data()
方法,我以为我已经想通了。我传递了购物车项目对象,结果得到一个空字符串。如果我传递密钥而不是购物车项目本身,情况也是一样的。
我应该如何访问购物车项目数据?
这是“添加购物车项目数据”的函数,它有效(或者至少看起来是有效的):
function save_class_menu_selection( $cart_item_data, $product_id, $variation_id ) {
if ( !product_is_class( $product_id ) ) return $cart_item_data;
// Save the date, or give a fatal warning. Date is required.
if ( !empty($_REQUEST['class-date']) ) {
$cart_item_data['class-date'] = stripslashes($_REQUEST['class-date']);
return $cart_item_data;
}else{
wp_die('<h2>Invalid Class Date Selected</h2><p>You tried to add a class to your cart, but the date selected was invalid. Please try again.</p>');
exit;
}
}
add_filter( 'woocommerce_add_cart_item_data', 'save_class_menu_selection', 10, 3 );