繁体   English   中英

Custom Contact Form 7 Validation - 需要两个字段之一

[英]Custom Contact Form 7 Validation - One of two fields required

我的联系表上有两个文本字段:Cost Plus 和 Flat Rate。 我需要两者之一。 如果未输入成本加成,则需要固定费率……反之亦然。 functions.php 中的这段代码似乎没有给我任何反馈。

add_filter( 'wpcf7_validate_text', 'custom_form_validation_filter', 20, 2 );
  
function custom_form_validation_filter( $result, $tag ) {
    $tag = new WPCF7_FormTag($tag);
    
    if ('cost-plus' == $tag->name) {
        $cost_plus = isset($_POST['cost-plus']) ? trim($_POST['cost-plus']) : '';
        $flat_rate = isset($_POST['flate-rate']) ? trim($_POST['flate-rate']) : '';

        if ( empty($cost_plus) && empty($flat_rate) ) {
            $result->invalidate( $tag, "You must enter a Cost Plus OR Flat Rate value." );
        }
    }
  return $result;
}

下面的代码应该适用于您的用例。 也许您需要一些额外的检查,具体取决于前端在 post 请求中发送的值。 如果下面的代码不适用于您的用例,请考虑在此处发布整个 POST 请求以进行调试。

if(isset($_POST['cost-plus']) || isset($_POST['cost-plus'])){
    // Do logic here
}else{
    $result->invalidate( $tag, "You must enter a Cost Plus OR Flat Rate value." );
}

不知道我是否迟到了,但我设法使用“wpcf7_validate”挂钩实现了这一点,循环遍历表单中的标签并检查它们是否为空,如果它们是空的,我会像这样使它们无效:

/*
 * Contact Form 7 - Require the user to enter at least one phone contact or one mobile phone contact
 */
function requireAtLeastOneContact($result, $tags){
    $emptyContactTags = [];
    foreach ($tags as $tag) {
        if(($tag->name == 'telefone' && $_POST[$tag->name] == "") || ($tag->name == 'telemovel' && $_POST[$tag->name] == "")){
            $emptyContactTags [] = $tag;            
        }
    }    
    if(sizeof($emptyContactTags ) == 2){
        foreach ($emptyContactTags as $emptyContact) {
            $result->invalidate($emptyContact, "You must enter at least one contact.");
        }
    }
    return $result;
}

add_filter('wpcf7_validate', 'requireAtLeastOneContact', 20, 2);

可能需要一些改进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM