簡體   English   中英

接受聯系表7(PHP / Wordpress)中的兩個字段之一

[英]Accept either one of two fields in Contact Form 7 (PHP/Wordpress)

我試圖在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版本來更改此設置?

我設法從有關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;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM