我已经尝试在StackOverflow上搜索此问题,但是答案一般来说都是这样,所以我在确切地知道如何执行此操作时遇到了一些麻烦。
我有一个联系表单7表单,其中包含两个字段:一个用于电子邮件your-email
,另一个用于电话your-telephone
。我希望表单接受这些字段之一,并且在两个字段都为空时使其无效。
我发现一个片段并不能完全做到这一点,但是似乎使用了正确的钩子,在这里:https://wpquestions.com/Cross_Field_Validation_in_Contact_Form_7/10078
我这样将代码转换为我的目的,并且已经成功了一半
add_filter( 'wpcf7_validate', 'wpq_validate' );
function wpq_validate( $result ) {
$email = filter_input( INPUT_POST, 'your-email', FILTER_SANITIZE_STRING );
$telephone = filter_input( INPUT_POST, 'your-telephone', FILTER_SANITIZE_STRING );
$error_msg = 'One of these fields must be entered';
if( empty($email) && empty($telephone) ) {
$result['valid'] = false;
$result['reason']['your-email'] = $error_msg;
$result['reason']['your-telephone'] = $error_msg;
}
return $result;
}
“中途”是指当我将两个字段都保留为空时,不提交表单。但是它没有显示任何错误消息,并且表单的加载微调器无限旋转。我猜代码中有一些调用已弃用,因为该代码于2014年发布。
那么有谁知道我应该如何根据当前版本的联系表7进行更改?
答案 0 :(得分:0)
我设法从有关wpcf7_validate
过滤器的更新片段中获得了一些灵感。此代码阻止表单提交,并在两个字段的每个字段下方显示两个错误消息。它不是真正的DRY,我希望表单在整个表单下显示一般错误,而不是在每个字段上显示错误。因此,您会喜欢任何知道该怎么做的人的提示。
function wpq_validate( $result ) {
$form = WPCF7_Submission::get_instance();
$email = $form->get_posted_data('your-email');
$telephone = $form->get_posted_data('your-telephone');
if( empty($email) && empty($telephone) ) {
$result->invalidate('your-email', 'Either one of these fields must be filled. Please try again.' );
$result->invalidate('your-telephone', 'Either one of these fields must be filled. Please try again.' );
}
return $result;
}