接受联系表7(PHP / Wordpress)中的两个字段之一

时间:2018-09-19 14:26:18

标签: php wordpress contact-form-7

我已经尝试在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进行更改?

1 个答案:

答案 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;

}