为WooCommerce自定义必填结账字段添加验证
WooCommerce结账页面自定义必填字段验证失效的解决方法
问题说明
在WooCommerce中实现了以下功能:当购物车包含分类为video-short的商品时,在结账页面添加自定义字段并设置required=true,但该必填验证规则未生效。
原添加字段代码
<?php add_action( 'woocommerce_before_order_notes', 'add_video_short_checkout_fields', 1000, 1 ); function add_video_short_checkout_fields( $checkout ) { date_default_timezone_set('Europe/Amsterdam'); // 遍历购物车商品 foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $product = $cart_item['data']; if ( has_term( 'video-short', 'product_cat', $product->get_id() ) ) { $product_title = $product->get_name(); $unique_id = $cart_item_key; $current_date = date('d-m-Y', strtotime('+72 hours')); $hours_to_add = 24; // 为对应商品添加自定义字段 echo '<div class="video-short-fields group_extra_info">'; echo '<h3>' . esc_html( $product_title ) . '</h3>'; echo '<div class="video-short-fields form-row-group">'; woocommerce_form_field( 'custom_field_1_' . $unique_id, array( 'type' => 'text', 'class' => array( 'video_veld customfield_start form-row-wide' ), 'label' => __( 'Video Title Short', 'woocommerce' ), 'placeholder' => __( 'Your title', 'woocommerce' ), 'required' => true, ), $cart_item['my_custom_field_1'] ); $hours_to_add += 24; } } ?>
解决方案
经@LoicTheAztec提示,通过添加自定义验证函数解决了必填验证失效的问题,验证代码如下:
// 自定义结账必填字段验证 add_filter( 'woocommerce_checkout_process', 'custom_required_checkout_fields_validation' ); function custom_required_checkout_fields_validation() { // 遍历购物车商品 foreach ( WC()->cart->get_cart() as $item_key => $item ) { if( isset($_POST['custom_field_1_'.$item_key]) && empty($_POST['custom_field_1_'.$item_key]) ) { wc_add_notice( __('"Video Title Short"为必填字段。', 'woocommerce' ), 'error' ); } } }
内容的提问来源于stack exchange,提问作者bent becker
相关产品推荐
相关产品推荐

