Как получить cart_item_data с помощью WooCommerce?

Как сохранить get_template_part() в переменную(Откроется в новой вкладке браузера)

ВОПРОС

Всем привет. Мне нужна ваша помощь в одном вопросе по использованию cart_item_data. Суть в том, что я хочу сохранить некоторые данные своего настраиваемого расширения и товаров с применением «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>’;

Некоторые строки просто защищены и не дают мне доступа. То есть, я вижу то, что мне нужно, но не могу взять это. Единственное, что работает как надо – функция для получения сведений:

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 );

Надеюсь, что вы поможете мне найти решение или может быть, кто-то сталкивался с подобным.

Полезно :

ВОПРОС

Всем привет. Мне нужна ваша помощь в одном вопросе по использованию cart_item_data. Суть в том, что я хочу сохранить некоторые данные своего настраиваемого расширения и товаров с применением «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>’;

Некоторые строки просто защищены и не дают мне доступа. То есть, я вижу то, что мне нужно, но не могу взять это. Единственное, что работает как надо – функция для получения сведений:

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 );

Надеюсь, что вы поможете мне найти решение или может быть, кто-то сталкивался с подобным.

Полезно : Как сохранить get_template_part() в переменную(Откроется в новой вкладке браузера)

ОТВЕТ

Привет. Считай, что тебе очень сильно повезло – сегодня я сам столкнулся с точно такой же ситуацией. Поэтому у меня есть, что предложить тебе.
Дело в том, что данные о корзине сохраняются только на время проведения сеанса. После того, как он закончен – происходит очистка. Несмотря на это, у меня получилось получить необходимые сведения.
Я попробовал использовать фильтр «get_cart_item_from_session». Он выводит всего два параметра. Первый – это мы получаем полностью очищенный элемент. Второй – вся информация, которая была в сеансе.
Единственное, что остается сделать нам с тобой – чтобы просто подключиться к этому фильтру и восстановить нужную информацию.
Вот пример кода:

add_filter( ‘woocommerce_add_cart_item_data’, function ( $cartItemData, $productId, $variationId ) {
$cartItemData[‘myCustomData’] = ‘someCustomValue’;
return $cartItemData;
}, 10, 3 );
add_filter( ‘woocommerce_get_cart_item_from_session’, function ( $cartItemData, $cartItemSessionData, $cartItemKey ) {
if ( isset( $cartItemSessionData[‘myCustomData’] ) ) {
$cartItemData[‘myCustomData’] = $cartItemSessionData[‘myCustomData’];
}
return $cartItemData;
}, 10, 3 );

Дальше можно вставить такой код, который позволяет выводить данные на странице оформления заказа:

add_filter( ‘woocommerce_get_item_data’, function ( $data, $cartItem ) {
if ( isset( $cartItem[‘myCustomData’] ) ) {
$data[] = array(
‘name’ => ‘My custom data’,
‘value’ => $cartItem[‘myCustomData’]
);
}
return $data;
}, 10, 2 );

И в конце необходимо добавить это, чтобы сохранить информацию при оформлении заказа:

add_action( ‘woocommerce_add_order_item_meta’, function ( $itemId, $values, $key ) {
if ( isset( $values[‘myCustomData’] ) ) {
wc_add_order_item_meta( $itemId, ‘myCustomData’, $values[‘myCustomData’] );
}
}, 10, 3 );


Полезно : Как сохранить get_template_part() в переменную(Откроется в новой вкладке браузера)

ОТВЕТ

Привет. Считай, что тебе очень сильно повезло – сегодня я сам столкнулся с точно такой же ситуацией. Поэтому у меня есть, что предложить тебе.
Дело в том, что данные о корзине сохраняются только на время проведения сеанса. После того, как он закончен – происходит очистка. Несмотря на это, у меня получилось получить необходимые сведения.
Я попробовал использовать фильтр «get_cart_item_from_session». Он выводит всего два параметра. Первый – это мы получаем полностью очищенный элемент. Второй – вся информация, которая была в сеансе.
Единственное, что остается сделать нам с тобой – чтобы просто подключиться к этому фильтру и восстановить нужную информацию.
Вот пример кода:

add_filter( ‘woocommerce_add_cart_item_data’, function ( $cartItemData, $productId, $variationId ) {
$cartItemData[‘myCustomData’] = ‘someCustomValue’;
return $cartItemData;
}, 10, 3 );
add_filter( ‘woocommerce_get_cart_item_from_session’, function ( $cartItemData, $cartItemSessionData, $cartItemKey ) {
if ( isset( $cartItemSessionData[‘myCustomData’] ) ) {
$cartItemData[‘myCustomData’] = $cartItemSessionData[‘myCustomData’];
}
return $cartItemData;
}, 10, 3 );

Дальше можно вставить такой код, который позволяет выводить данные на странице оформления заказа:

add_filter( ‘woocommerce_get_item_data’, function ( $data, $cartItem ) {
if ( isset( $cartItem[‘myCustomData’] ) ) {
$data[] = array(
‘name’ => ‘My custom data’,
‘value’ => $cartItem[‘myCustomData’]
);
}
return $data;
}, 10, 2 );

И в конце необходимо добавить это, чтобы сохранить информацию при оформлении заказа:

add_action( ‘woocommerce_add_order_item_meta’, function ( $itemId, $values, $key ) {
if ( isset( $values[‘myCustomData’] ) ) {
wc_add_order_item_meta( $itemId, ‘myCustomData’, $values[‘myCustomData’] );
}
}, 10, 3 );