name = 'user'; $this->label = __("User",'acf'); $this->category = __("Relational",'acf'); $this->defaults = array( 'role' => 'all', 'field_type' => 'select', 'allow_null' => 0, ); // do not delete! parent::__construct(); } /* * format_value_for_api() * * This filter is appied to the $value after it is loaded from the db and before it is passed back to the api functions such as the_field * * @type filter * @since 3.6 * @date 23/01/13 * * @param $value - the value which was loaded from the database * @param $field - the field array holding all the field options * * @return $value - the modified value */ function format_value_for_api( $value, $post_id, $field ) { // format value if( !$value || $value == 'null' ) { return false; } // temp convert to array $is_array = true; if( !is_array($value) ) { $is_array = false; $value = array( $value ); } foreach( $value as $k => $v ) { $user_data = get_userdata( $v ); //cope with deleted users by @adampope if( !is_object($user_data) ) { unset( $value[$k] ); continue; } $value[ $k ] = array(); $value[ $k ]['ID'] = $v; $value[ $k ]['user_firstname'] = $user_data->user_firstname; $value[ $k ]['user_lastname'] = $user_data->user_lastname; $value[ $k ]['nickname'] = $user_data->nickname; $value[ $k ]['user_nicename'] = $user_data->user_nicename; $value[ $k ]['display_name'] = $user_data->display_name; $value[ $k ]['user_email'] = $user_data->user_email; $value[ $k ]['user_url'] = $user_data->user_url; $value[ $k ]['user_registered'] = $user_data->user_registered; $value[ $k ]['user_description'] = $user_data->user_description; $value[ $k ]['user_avatar'] = get_avatar( $v ); } // de-convert from array if( !$is_array && isset($value[0]) ) { $value = $value[0]; } // return value return $value; } /* * input_admin_head() * * This action is called in the admin_head action on the edit screen where your field is created. * Use this action to add css and javascript to assist your create_field() action. * * @info http://codex.wordpress.org/Plugin_API/Action_Reference/admin_head * @type action * @since 3.6 * @date 23/01/13 */ function input_admin_head() { if( ! function_exists( 'get_editable_roles' ) ) { // if using front-end forms then we need to add this core file require_once( ABSPATH . '/wp-admin/includes/user.php' ); } } /* * create_field() * * Create the HTML interface for your field * * @type action * @since 3.6 * @date 23/01/13 * * @param $field - an array holding all the field's data */ function create_field( $field ) { if( ! function_exists( 'get_editable_roles' ) ) { // if using front-end forms then we need to add this core file require_once( ABSPATH . '/wp-admin/includes/user.php' ); } // options $options = array( 'post_id' => get_the_ID(), ); // vars $args = array(); // editable roles $editable_roles = get_editable_roles(); if( !empty($field['role']) ) { if( ! in_array('all', $field['role']) ) { foreach( $editable_roles as $role => $role_info ) { if( !in_array($role, $field['role']) ) { unset( $editable_roles[ $role ] ); } } } } // filters $args = apply_filters('acf/fields/user/query', $args, $field, $options['post_id']); $args = apply_filters('acf/fields/user/query/name=' . $field['_name'], $args, $field, $options['post_id'] ); $args = apply_filters('acf/fields/user/query/key=' . $field['key'], $args, $field, $options['post_id'] ); // get users $users = get_users( $args ); if( !empty($users) && !empty($editable_roles) ) { $field['choices'] = array(); foreach( $editable_roles as $role => $role_info ) { // vars $this_users = array(); $this_json = array(); // loop over users $keys = array_keys($users); foreach( $keys as $key ) { if( in_array($role, $users[ $key ]->roles) ) { $this_users[] = $users[ $key ]; unset( $users[ $key ] ); } } // bail early if no users for this role if( empty($this_users) ) { continue; } // label $label = translate_user_role( $role_info['name'] ); // append to choices $field['choices'][ $label ] = array(); foreach( $this_users as $user ) { $field['choices'][ $label ][ $user->ID ] = ucfirst( $user->display_name ); } } } // modify field if( $field['field_type'] == 'multi_select' ) { $field['multiple'] = 1; } $field['type'] = 'select'; do_action('acf/create_field', $field); } /* * create_options() * * Create extra options for your field. This is rendered when editing a field. * The value of $field['name'] can be used (like bellow) to save extra data to the $field * * @type action * @since 3.6 * @date 23/01/13 * * @param $field - an array holding all the field's data */ function create_options( $field ) { // vars $key = $field['name']; ?> __('All', 'acf')); $editable_roles = get_editable_roles(); foreach( $editable_roles as $role => $details ) { // only translate the output not the value $choices[$role] = translate_user_role( $details['name'] ); } do_action('acf/create_field', array( 'type' => 'select', 'name' => 'fields[' . $key . '][role]', 'value' => $field['role'], 'choices' => $choices, 'multiple' => '1', )); ?> 'select', 'name' => 'fields['.$key.'][field_type]', 'value' => $field['field_type'], 'choices' => array( __("Multiple Values",'acf') => array( //'checkbox' => __('Checkbox', 'acf'), 'multi_select' => __('Multi Select', 'acf') ), __("Single Value",'acf') => array( //'radio' => __('Radio Buttons', 'acf'), 'select' => __('Select', 'acf') ) ) )); ?> 'radio', 'name' => 'fields['.$key.'][allow_null]', 'value' => $field['allow_null'], 'choices' => array( 1 => __("Yes",'acf'), 0 => __("No",'acf'), ), 'layout' => 'horizontal', )); ?> ID) ) { $value = $value->ID; } return $value; } } new acf_field_user(); ?>