无法在ACF表单中添加验证错误

时间:2018-12-29 14:19:11

标签: php wordpress advanced-custom-fields

我正在将ACF与WordPress结合使用,并且我有一个要向其中添加验证错误的表单,但是它似乎没有用(我想我知道原因)...

我的代码:

function my_acf_update_value( $value, $post_id, $field  ) {

    // Get the users numerical user id
    $user_id = str_replace('user_', '', $post_id);

    $value = sanitize_text_field($value);

    /** @noinspection PhpParamsInspection */
    $user_data = wp_update_user(array('ID' => $user_id, 'user_email' => $value ) );

    if ( is_wp_error( $user_data ) ) {
        $wp_error = $user_data->get_error_message();
        $input = $field['prefix'] . '[' . $field['key'] . ']';
        acf_add_validation_error($input, $wp_error);
    }

    return $value;

}

add_filter('acf/update_value/key=field_5c121023e119f', 'my_acf_update_value', 10, 3);

您可能会说,我正在尝试根据用户在前端ACF表单的电子邮件字段中提供的电子邮件来更新用户电子邮件地址字段(默认WP one)。

然后我检查更新是否引起了任何错误,并且很明显是否要添加到ACF验证错误中,但是更新成功通过了。

假设这是因为 update 函数在验证后运行,这就是为什么它不起作用的原因?

因此,我考虑在验证功能中进行更新,例如:

function my_acf_validate_value( $valid, $value, $field, $input ){

    // bail early if value is already invalid
    if( !$valid ) {
        return $valid;
    }

    // Some code...

    // Return error here?
    return $valid;

}

add_filter('acf/validate_value/key=field_5c121023e119f', 'my_acf_validate_value', 10, 4);

...但是我似乎无法在这里访问$post_id,这似乎也不是处理它的最佳方法吗?

有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以使用var_dump来查看函数中包含的数据-在现有函数属性之一中,或者使用get_the_ID()global $post;访问当前的Post对象。不过,在尝试在此处操作Post对象时要当心。