__('Permissions'), 'name' => 'acfe_permissions', 'key' => 'acfe_permissions', 'instructions' => __('Select user roles that are allowed to view and edit this field. If nothing is selected, then this field will be available to everyone.'), 'type' => 'checkbox', 'required' => false, 'default_value' => false, 'choices' => acfe_get_roles(), 'layout' => 'horizontal' ), true); } add_filter('acf/prepare_field', 'acfe_roles_prepare_field'); function acfe_roles_prepare_field($field){ if(!isset($field['acfe_permissions']) || empty($field['acfe_permissions'])) return $field; $current_user_roles = acfe_get_current_user_roles(); $render_field = false; foreach($current_user_roles as $current_user_role){ foreach($field['acfe_permissions'] as $field_role){ if($current_user_role !== $field_role) continue; $render_field = true; break; } if($render_field) break; } if(!$render_field) return false; return $field; } function acfe_get_roles(){ global $wp_roles; $choices = array(); if(is_multisite()) $choices['super_admin'] = __('Super Admin'); foreach($wp_roles->roles as $role => $settings){ $choices[$role] = $settings['name']; } return $choices; } function acfe_get_current_user_roles(){ global $current_user; if(!is_object($current_user) || !isset($current_user->roles)) return false; $roles = $current_user->roles; if(is_multisite() && current_user_can('setup_network')) $roles[] = 'super_admin'; return $roles; }