gpt4 book ai didi

php - 如何使用 WooCommerce 检索 cart_item_data?

转载 作者:IT王子 更新时间:2023-10-29 00:10:36 25 4
gpt4 key购买 nike

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()方法我以为我已经全部弄清楚了。我传入了购物车项目对象,以及……一个空字符串。如果我传递 key 而不是购物车项目本身,则相同。

我应该如何访问购物车商品数据?


这是“添加购物车项目数据”功能,它有效(或至少看起来有效):

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

最佳答案

我今天也遇到了同样的情况,经过一番研究,我偶然发现了这个问题。经过一些逆向工程后,我发现了问题并希望为其他可能会遇到这个问题的人提供解决方案。

问题在于,当购物车商品从 session 中恢复时,数据会被清理。因此,额外的购物车商品数据会存储到 session 中,但在下一次请求时不会恢复。

有一个过滤器“woocommerce_get_cart_item_from_session”。作为第一个参数,您将获得经过清理的购物车项目(没有额外数据),作为第二个参数,您将获得存储到 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 );

您无需在后台显示数据,所有订单项目元数据都会自动显示。

关于php - 如何使用 WooCommerce 检索 cart_item_data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25188365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com