我通过更改模板在运输方式部分添加了两个自定义输入字段,/genesis-sample/woocommerce/checkout/review-order.php
我还设法使它们有条件地被要求。只有在检查特定的广播按钮时,输入字段才会出现并需要。我正在使用 jQuery 代码使字段出现和消失。所有这些工作正常。代码在这里:
if ( isset($_POST['shipping_method_0_legacy_local_pickup']) && $_POST['shipping_method_0_legacy_local_pickup'] == 1 ) {
$cheq = 'true';
}
else {
$cheq = 'false';
}
woocommerce_form_field( 'fieldtester1' , array(
'type' => 'text',
'class' => array('wccs-field-class wccs-form-row-wide blahblah1'),
'label' => 'Enter Your Carrier Name',
'required' => $cheq,
'placeholder' => 'Carrier Name',
), $checkout->get_value( 'fieldtester1' ));
woocommerce_form_field( 'fieldtester2' , array(
'type' => 'text',
'class' => array('wccs-field-class wccs-form-row-wide blahblah2'),
'label' => 'Enter Your Carrier Account #',
'required' => $cheq,
'placeholder' => 'Carrier Number',
), $checkout->get_value( 'fieldtester2' ));
但问题是,即使required
设置了两个字段的属性,如果按下按钮true
时字段为空,验证也不会发生。Place Order
理想情况下,订单不应通过,并且应生成错误消息。我已经添加了以下代码functions.php
来强制验证输入字段,但它没有做任何事情。代码在这里:
add_action('woocommerce_checkout_process', 'carrier_checkout_process');
function carrier_checkout_process() {
if ( isset($_POST['shipping_method_0_legacy_local_pickup']) && $_POST['shipping_method_0_legacy_local_pickup'] == 1 ) {
if( empty( $_POST['fieldtester1'] ) ) {
wc_add_notice( ( "Please don't forget to enter your shipping carrier details." ), "error" );
}
}
}
所以,这就是我要找的东西:
- 谁能帮我强制验证我添加的两个输入字段?
- 验证后,我还想在新的订单电子邮件中添加这两个字段,并在 Wordpress 仪表板中添加订单详细信息。
如果您想知道为什么我首先不使用 woocommerce 结帐字段挂钩来添加输入字段...我没有将字段添加到结帐表单,因此挂钩没有任何帮助。这些字段被添加到运输方式部分。另一个原因是,我想在required
每次用户切换运输方式时更新属性。使用 Jquery 更改required
属性无论出于何种原因都不起作用,相信我我尝试了两天。无论如何,那部分已经开始工作了。唯一的问题是让字段验证并将它们添加到订单电子邮件和订单详细信息中。我到处环顾四周,我得到的最接近的帮助是LoicTheAztec 给出了详细解决方案的这篇文章