WooCommerce에서 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>';
의 첫 번째 덤프WC()
에는 다음 속성이 있습니다.session->_data->cart->(serialized data)
. 단, _data 속성은 보호되지만 시리얼화된 데이터 내에 커스텀필드가 표시됩니다.
$cart_item은 다음과 같은 배열입니다.product_id
기타 데이터도 있지만 커스텀 데이터는 포함되어 있지 않습니다.
마침내, 내가 모든 것을 알아냈다고 생각했던 방법을 사용하면서.카트 아이템 오브젝트를 전달했는데...빈 끈카트 아이템 자체가 아니라 키를 넘겨도 마찬가지입니다.
카트 항목 데이터에 어떻게 액세스해야 합니까?
다음은 "카트 항목 데이터 추가" 기능으로 작동합니다(또는 적어도 작동하는 것 같음).
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 );
저도 오늘 같은 상황이었고, 조사를 좀 한 후에 이 질문에 걸려 넘어졌습니다.리버스 엔지니어링을 실시한 결과, 문제를 발견해, 이 문제에 부딪힐 가능성이 있는 다른 문제를 해결하려고 합니다.
문제는 카트 항목이 세션에서 복원될 때 데이터가 삭제된다는 것입니다.따라서 추가 카트 항목 데이터는 세션에 저장되지만 다음 요청 시 복원되지 않습니다.
"woocommerce_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 );
백엔드 내의 데이터를 표시하기 위해 다른 작업을 할 필요가 없으며, 모든 주문 항목 메타 데이터가 자동으로 표시됩니다.
안타깝게도 기본 카트 항목 데이터를 사용할 수 없습니다.지원이나 문서화가 부족하기 때문에 제대로 실시되지 않거나 폐지될 수도 있다고 생각합니다.
대신 카트 세션 변수를 사용하여 동일한 작업을 수행했습니다. 각 가 '키'가 '키'가 '키'는 '키'가 '키'는 '키'입니다.cart_item_key
각 어레이의 값은 커스텀필드의 키와 값의 쌍을 포함하는 다른 어레이입니다.즉, 카트 세션 데이터로 저장되는 것을 제외하고 기본적으로 카트 항목 데이터와 동일합니다.
다음은 Gist를 쉽게 하기 위한 몇 가지 유틸리티 기능을 포함하고 있습니다.
https://gist.github.com/RadGH/e3444fc661554a0f8c6f
은 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★에 있습니다.WC()->session
두 과 같습니다.
WC()->session->get('_my_cart_item_data');
WC()->session->set('_my_cart_item_data', $cart_item_data_array);
필요한 액션 훅은 다음과 같습니다.
<<<EXAMPLES
action: woocommerce_add_to_cart
desc: When an item is added to the cart.
args: $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data
action: woocommerce_add_order_item_meta
desc: When a cart item is converted to an order item, save metadata to the order item
using the function "wc_add_order_item_meta( $item_id, $key, $value )"
args: item_id, $values, $cart_item_key
언급URL : https://stackoverflow.com/questions/25188365/how-to-retrieve-cart-item-data-with-woocommerce
'programing' 카테고리의 다른 글
JSONObject - 값을 얻는 방법 (0) | 2023.02.22 |
---|---|
pdf 스트림을 angularjs로 읽는 방법 (0) | 2023.02.22 |
재료 설계 라이트(Right)JS (0) | 2023.02.22 |
Spring Security HTTP Basic for RESTFul 및 FormLogin(Cookies) for web - 주석 (0) | 2023.02.22 |
장고에서는 에러:데이터를 덤프할 때 데이터베이스를 직렬화할 수 없습니다. (0) | 2023.02.22 |