Хорошо, нашел способ сделать это - это способ сделать это для экрана Пользователь , он может отличаться для других типов сообщений.
Нам нужно не только отключитьпроверка на стороне сервера, но также проверка на стороне клиента , для этого мы делаем что-то вроде этого:
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()
не всегда доступен, эти методы делают not поддерживает формы переднего плана.
Также обратите внимание, что этот код определенно можно улучшить, чтобы он был намного более СУХИМ, но я оставлю это на ваше усмотрение.:)