在WordPress中使用ACF插件验证字段时出错

时间:2018-07-05 作者:RiKr2

在wordpress中使用高级自定义字段插件验证字段时,我遇到以下问题。所发生的情况是,字段已正确验证,但错误出现在新页面上,而不是出现在我要验证的字段上方的同一页面上。要验证的代码如下:

function validate_fields_contact()
{
    add_filter(\'acf/validate_value/name=phone_contact\', \'validate_phone_number\', 10, 4);
}

function validate_phone_number($valid, $value, $field, $input)
{
    if (!$valid) {
        return $valid;
    }

    if(!preg_match("/^\\+XX(\\s|\\d){8,12}$/", $value)) {
        return __(\'Incorrect Format.\');
    }

    return true;
}
It should be like that:

enter image description here

This is what happens

enter image description here

2 个回复
最合适的回答,由SO网友:Kostiantyn Petlia 整理而成

我也有同样的问题。我浪费了足够的时间来回答。

首先确保:

ajax请求没有失败,并且发生了。因此,请检查:

acf\\u form\\u head()是否在get\\u header()之前,并且是否在输出任何html之前运行(查看this ACF support topic 也如果使用acf\\u form()创建新用户,请查看this topic).

但在我的例子中,根是\'acf/validate\\u value\'挂钩中这一行的\'u admin():

if ( ! $valid || is_admin() ) { return $valid; }
Because is_admin() returns \'true\' by AJAX requests. 因此,验证功能无法工作。

希望这对某人有帮助。

SO网友:RCNeil

如果有人后来偶然发现这一点——在我的情况下,这是因为我有一个admin_init 挂钩,防止进入wp-admin 对于某个角色(这就是为什么我们通常有一个前端ACF表单,对吗?)并且在尝试运行时会产生错误admin-ajax.php. ACF使用该文件进行AJAX验证,因此当您运行某种;“防止wp管理”;钩子,这也会停止ACF验证。

因此,钩子干扰是:

add_action( \'admin_init\', \'custom_no_admin_access\', 100 );
function custom_no_admin_access() {
    global $current_user;
    $user_roles = $current_user->roles;
    $user_role = array_shift($user_roles);
    if($user_role === \'special-role\'){
        exit( wp_redirect(home_url()));
    }
}
我把它变成:

add_action( \'admin_init\', \'custom_no_admin_access\', 100 );
function custom_no_admin_access() {
    global $current_user;
    $user_roles = $current_user->roles;
    $user_role = array_shift($user_roles);
    if($user_role === \'special-role\' && $_SERVER[\'PHP_SELF\'] != \'/wp-admin/admin-ajax.php\'){
        exit( wp_redirect(home_url()));
    }
}
故障排除的一大帮助是使用Chrome的Inspector跟踪网络请求。转到网络选项卡并选中;保留日志“;因此,您可以查看请求的历史记录。尝试提交表单,我可以看到它正在重定向到主页(我的admin_init hook在尝试使用admin ajax时说要这样做。验证失败之前。

希望有帮助!

结束

相关推荐

Comment form validation

如何设置注释字段的验证规则?我更改了评论者姓名/电子邮件/主页onmouseover和onblur的值(我使用它而不是标签-因此如果字段为空,它会显示“您的电子邮件”、“您的主页”等)。问题是,在提交时,它会在主页字段中提交此文本(因为它没有验证,而不像电子邮件字段,如果您输入了除[email protected]).如何验证主页字段?

在WordPress中使用ACF插件验证字段时出错 - 小码农CODE - 行之有效找到问题解决它

在WordPress中使用ACF插件验证字段时出错

时间:2018-07-05 作者:RiKr2

在wordpress中使用高级自定义字段插件验证字段时,我遇到以下问题。所发生的情况是,字段已正确验证,但错误出现在新页面上,而不是出现在我要验证的字段上方的同一页面上。要验证的代码如下:

function validate_fields_contact()
{
    add_filter(\'acf/validate_value/name=phone_contact\', \'validate_phone_number\', 10, 4);
}

function validate_phone_number($valid, $value, $field, $input)
{
    if (!$valid) {
        return $valid;
    }

    if(!preg_match("/^\\+XX(\\s|\\d){8,12}$/", $value)) {
        return __(\'Incorrect Format.\');
    }

    return true;
}
It should be like that:

enter image description here

This is what happens

enter image description here

2 个回复
最合适的回答,由SO网友:Kostiantyn Petlia 整理而成

我也有同样的问题。我浪费了足够的时间来回答。

首先确保:

ajax请求没有失败,并且发生了。因此,请检查:

acf\\u form\\u head()是否在get\\u header()之前,并且是否在输出任何html之前运行(查看this ACF support topic 也如果使用acf\\u form()创建新用户,请查看this topic).

但在我的例子中,根是\'acf/validate\\u value\'挂钩中这一行的\'u admin():

if ( ! $valid || is_admin() ) { return $valid; }
Because is_admin() returns \'true\' by AJAX requests. 因此,验证功能无法工作。

希望这对某人有帮助。

SO网友:RCNeil

如果有人后来偶然发现这一点——在我的情况下,这是因为我有一个admin_init 挂钩,防止进入wp-admin 对于某个角色(这就是为什么我们通常有一个前端ACF表单,对吗?)并且在尝试运行时会产生错误admin-ajax.php. ACF使用该文件进行AJAX验证,因此当您运行某种;“防止wp管理”;钩子,这也会停止ACF验证。

因此,钩子干扰是:

add_action( \'admin_init\', \'custom_no_admin_access\', 100 );
function custom_no_admin_access() {
    global $current_user;
    $user_roles = $current_user->roles;
    $user_role = array_shift($user_roles);
    if($user_role === \'special-role\'){
        exit( wp_redirect(home_url()));
    }
}
我把它变成:

add_action( \'admin_init\', \'custom_no_admin_access\', 100 );
function custom_no_admin_access() {
    global $current_user;
    $user_roles = $current_user->roles;
    $user_role = array_shift($user_roles);
    if($user_role === \'special-role\' && $_SERVER[\'PHP_SELF\'] != \'/wp-admin/admin-ajax.php\'){
        exit( wp_redirect(home_url()));
    }
}
故障排除的一大帮助是使用Chrome的Inspector跟踪网络请求。转到网络选项卡并选中;保留日志“;因此,您可以查看请求的历史记录。尝试提交表单,我可以看到它正在重定向到主页(我的admin_init hook在尝试使用admin ajax时说要这样做。验证失败之前。

希望有帮助!

相关推荐

Frontend Post Form Validation

好的,这里有几篇关于前端投递表单的帖子。我把它们都读了,这让我明白了我的意思。现在,我遇到的每一个表单都有某种形式的验证,它似乎可以检查您想要设置为必需的字段的值。我试过了,但什么都没用。我只是无法设置任何必填字段。表单的其他方面都很完美。但我希望强制执行我的必填字段(适当错误消息的奖励)。我试着在google上四处看看,我真的不认为JS是我想要使用的。以及任何其他我似乎也无法进行的php验证。我敢肯定,我把它们都弄错了。以下是我所拥有的:http://pastebin.com/rw4c6jZQ (应验证