Php WooCommerce:将输入添加到购物车,然后将数据添加到购物车项目
我一直在尝试在购物车上添加一个选项,以便客户可以重命名产品。这用于他们跟踪将发送给不同人员的同一类型的不同产品(制作篮系统) 我使用了Php WooCommerce:将输入添加到购物车,然后将数据添加到购物车项目,php,wordpress,woocommerce,hook-woocommerce,Php,Wordpress,Woocommerce,Hook Woocommerce,我一直在尝试在购物车上添加一个选项,以便客户可以重命名产品。这用于他们跟踪将发送给不同人员的同一类型的不同产品(制作篮系统) 我使用了woocommerce\u cart\u item\u name过滤器将输入字段添加到购物车项目中。当用户单击输入框旁边的“添加”按钮时,我正在使用javascript中的答案并触发wc\u update\u cart,但它似乎根本不起作用 在添加产品后,是否有其他方法可以将此自定义名称数据添加到相应的购物车项目中?我知道我可以在将产品添加到购物车时完成这项工作(
woocommerce\u cart\u item\u name
过滤器将输入字段添加到购物车项目中。当用户单击输入框旁边的“添加”按钮时,我正在使用javascript中的答案并触发wc\u update\u cart
,但它似乎根本不起作用
在添加产品后,是否有其他方法可以将此自定义名称数据添加到相应的购物车项目中?我知道我可以在将产品添加到购物车时完成这项工作(或者是一种解决方法,即删除该产品并将其添加到新字段中。但我不想这样做)
提前感谢您的帮助。发现了问题
我在输入框旁边的“添加”按钮,用来触发wc\u update\u cart
像jQuery(document.trigger('wc\u update\u cart')
没有验证我在php端对$\u POST['update\u cart']
的值所做的检查。当我意识到我将我的woocommerce\u cart\u item\u name
过滤器更改为仅添加输入框,并使用Update Basket
按钮更新名称。因此,我的代码更改为:
<?php
add_filter('woocommerce_cart_item_name','custom_naming_front',10,3);
function custom_naming_front($product_title,$cart_item,$cart_item_key){
if(isset($cart_item['custom_name']) && !empty($cart_item['custom_name'])){
$product_title=$cart_item['custom_name'];
}
$product_title .= '<div class="custom-name-form-wrapper" id="custom-name'.$cart_item_key.'">
<input type="text" name="cart['.$cart_item_key.'][custom_name]" id="custom_name_text'.$cart_item_key.'" value="" placeholder="enter the name you want to give this product" />
</div>
</div>';
return $product_title;
}
?>
显示更新名称的函数如下所示:
<?php
function custom_name_save_to_cart(){
if ( ( ! empty( $_POST['apply_coupon'] ) || ! empty( $_POST['update_cart'] ) || ! empty( $_POST['proceed'] ) ) && isset( $_POST['_wpnonce'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'woocommerce-cart' ) ) {
$cart_totals = isset( $_POST['cart'] ) ? $_POST['cart'] : '';
if ( ! WC()->cart->is_empty()) {
foreach ( WC()->cart->cart_contents as $cart_item_key => $values ) {
if ( ! isset( $cart_totals[ $cart_item_key ] ) || ! isset( $cart_totals[ $cart_item_key ]['custom_name'] ) ) {
continue;
}
WC()->cart->cart_contents[ $cart_item_key ]['custom_name'] = $cart_totals[ $cart_item_key ]['custom_name'];
}
}
}
}
add_action( 'wp_loaded', 'custom_name_save_to_cart', 25);
?>