我正在尝试使用一些自定义附加数据将产品添加到 Woocommerce 购物车。我认为添加到购物车效果很好,因为购物车页面上显示了同一产品的两行。但是,我希望它在购物车上可见,如下图所示:
要将产品添加到购物车,我使用以下代码:
WC()->cart->add_to_cart( $product_id, $quantity );
并将以下过滤器添加到
woocommerce_add_cart_item_data
以确保“电子邮件”值添加到购物车项目中:
function plugin_add_cart_item_data( $cart_item_data, $product_id, $variation_id ) {
if( isset( $_POST['emaill'] ) ) {
$cart_item_data['emaill'] = sanitize_text_field( $_POST['emaill'] );
}
return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'plugin_add_cart_item_data', 10, 3 );
要查看如上图所示的额外“电子邮件”信息,我添加了以下代码:
function plugin_republic_get_item_data( $item_data, $cart_item_data ) {
if( isset( $cart_item_data['emaill'] ) ) {
$item_data[] = array(
'key' => __( 'Your name', 'plugin-republic' ),
'value' => wc_clean( $cart_item_data['emaill'] ));
}
return $item_data;
}
add_filter( 'woocommerce_get_item_data', 'plugin_republic_get_item_data', 10, 2 );
但是产品只是这样显示的;这里没有显示“电子邮件”值:
我的问题是:我做错了什么吗?是否可能与我的主题(Bricks)有冲突,它只是忽略了这个“电子邮件”值?如果有的话应该去哪里查找原因呢?
我怎样才能正确调试这个?我可以在哪个数据库表中查看是否存储了实际的“email”值?我可以 $cart_item_data 控制台中的信息或其他信息吗?
顺便说一句,“电子邮件”信息也没有显示在管理仪表板中,但我想这是由同样的问题引起的。
一些潜在的问题。这是我开始调试它的方法:
我知道很愚蠢,但你是故意尝试发送“电子邮件”而不是“电子邮件”,对吗?
确保将产品添加到购物车时,“电子邮件”字段实际上是通过 POST 请求发送的。您可以在 chrome 开发工具中检查网络请求。
在过滤器函数(plugin_add_cart_item_data()和plugin_republic_get_item_data())中添加error_log()语句以检查它们是否正确执行。例如:
function plugin_add_cart_item_data( $cart_item_data, $product_id, $variation_id ) {
error_log('plugin_add_cart_item_data function called');
if( isset( $_POST['emaill'] ) ) {
$cart_item_data['emaill'] = sanitize_text_field( $_POST['emaill'] );
}
return $cart_item_data;
}
WooCommerce 将购物车项目数据存储在 wp_woocommerce_cart_contents 表中。您可以检查相关购物车商品的“电子邮件”数据是否存储在那里。那里有更新吗