是否允许管理员在某些情况下使用ACF绕过必填字段?

时间:2018-12-28 12:59:59

标签: wordpress advanced-custom-fields acfpro

我已经使用acf_form创建了ACF前端表单;这些字段将添加到后端的 User 记录中;但是,由于此表单具有必填字段,这意味着管理员无法在后端 上对用户进行基本更改,除非用户已填写此表单。

所以我想知道在某些情况下是否可能允许管理员绕过要求填写必填字段的问题,如果可以,我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

好,找到了一种方法-这是针对 User 屏幕的一种方法,对于其他帖子类型,它可能有所不同。

我们不仅必须禁用服务器端验证,而且还必须禁用 client 端验证,为此,我们需要执行以下操作:

add_action('acf/input/admin_head', 'my_acf_admin_head');

function my_acf_admin_head() {

    if (!function_exists('get_current_screen')) {
        return;
    }

    // Get current page/screen
    $screen = get_current_screen();

    // Get current user
    $user = wp_get_current_user();

    if (is_object($screen) and is_a($screen, 'WP_Screen')) {

        if (($screen->id == 'user-edit' or ($screen->id == 'user' and $screen->action == 'add')) and in_array('administrator', $user->roles)) {
            ?>
                <script type="text/javascript">
                    window.acf.validation.active = false;
                </script>
            <?php
        }

    }

}

这将在与我们的限定词匹配的任何页面中添加一些Javascript以禁用ACF客户端验证。

现在,要禁用后端验证,我们可以执行以下操作:

add_action('acf/validate_save_post', 'my_acf_validate_save_post', 10, 0);

function my_acf_validate_save_post() {

    if (!function_exists('get_current_screen')) {
        return;
    }

    // Get current page/screen
    $screen = get_current_screen();

    // Get current user
    $user = wp_get_current_user();

    if (is_object($screen) and is_a($screen, 'WP_Screen')) {

        if (($screen->id == 'user-edit' or ($screen->id == 'user' and $screen->action == 'add')) and in_array('administrator', $user->roles)) {
            // clear all errors so they can bypass validation for user data
            acf_reset_validation_errors();
        }

    }

}

请注意,由于get_current_screen()并不总是可用,因此这些方法不支持前端表单。

还请注意,可以肯定地将此代码进行改进以使其更加干燥,但我将由您自己决定。 :)