Во время 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->(serialized data)
. Однако свойство _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 );