Я буду создавать сценарий jQuery, который установит поля ввода только для чтения с $('input').attr('readonly', true);
(упрощенно), основываясь на текущей роли пользователя.
Я боялся, что когда я не сделаю это поле, оно не сохранит серые поля обратно в БД.
Это полный код, который кому-нибудь понадобится в будущем:
add_action('admin_head', 'rtt_conditional_acf_post_input');
function rtt_conditional_acf_post_input()
{
$role = rtt_get_current_user_roles();
$target = null;
if (in_array("user_type_1", $role)) {
$target = '#acf-group_5e1d936b7e583'; // <--- element id of group_1
} else if (in_array("user_type_2", $role)) {
$target = '#acf-group_5e1d93bdf2a56'; // <--- element id of group_2
}
if($target) {
?>
<script type="application/javascript">
$ = jQuery;
$(document).ready(function () {
let target = '<?php echo $target; ?>';
$(target).find("input").each(function () {
$(this).attr('readonly', true);
});
});
</script>
<?php
}
}
function rtt_get_current_user_roles()
{
if (is_user_logged_in()) {
$user = wp_get_current_user();
$roles = ( array )$user->roles;
return $roles; // This returns an array
// Use this to return a single value
// return $roles[0];
} else {
return array();
}
}
Я только добавлю проверку, если текущая страница является постредактированной, перед выполнением полного сценария.