function ajax_query() { // validate if (!acf_verify_ajax()) { die; } // defaults $options = acf_parse_args($_POST, array('post_id' => 0, 's' => '', 'field_key' => '', 'paged' => 1)); // vars $results = array(); $args = array(); $s = false; $is_search = false; // paged $args['users_per_page'] = 20; $args['paged'] = $options['paged']; // search if ($options['s'] !== '') { // strip slashes (search may be integer) $s = wp_unslash(strval($options['s'])); // update vars $args['s'] = $s; $is_search = true; } // load field $field = acf_get_field($options['field_key']); if (!$field) { die; } // role if (!empty($field['role'])) { $args['role'] = acf_get_array($field['role']); } // search if ($is_search) { // append to $args $args['search'] = '*' . $options['s'] . '*'; // add reference $this->field = $field; // add filter to modify search colums add_filter('user_search_columns', array($this, 'user_search_columns'), 10, 3); } // 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 $groups = acf_get_grouped_users($args); // loop if (!empty($groups)) { foreach (array_keys($groups) as $group_title) { // vars $users = acf_extract_var($groups, $group_title); $data = array('text' => $group_title, 'children' => array()); // append users foreach (array_keys($users) as $user_id) { $users[$user_id] = $this->get_result($users[$user_id], $field, $options['post_id']); } // order by search if ($is_search && empty($args['orderby'])) { $users = acf_order_by_search($users, $args['s']); } // append to $data foreach ($users as $id => $title) { $data['children'][] = array('id' => $id, 'text' => $title); } // append to $r $results[] = $data; } } // optgroup or single if (!empty($args['role']) && count($args['role']) == 1) { $results = $results[0]['children']; } // return acf_send_ajax_results(array('results' => $results, 'limit' => $args['users_per_page'])); }
function get_choices($options = array()) { // defaults $options = acf_parse_args($options, array('post_id' => 0, 's' => '', 'field_key' => '', 'paged' => 1)); // vars $r = array(); $args = array(); // paged $args['users_per_page'] = 20; $args['paged'] = $options['paged']; // load field $field = acf_get_field($options['field_key']); // bail early if no field if (!$field) { return false; } // update $args if (!empty($field['role'])) { $args['role'] = acf_get_array($field['role']); } // search if ($options['s']) { // append to $args $args['search'] = '*' . $options['s'] . '*'; // add reference $this->field = $field; // add filter to modify search colums add_filter('user_search_columns', array($this, 'user_search_columns'), 10, 3); } // 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 $groups = acf_get_grouped_users($args); // bail early if no groups if (empty($groups)) { return false; } // loop foreach (array_keys($groups) as $group_title) { // vars $users = acf_extract_var($groups, $group_title); $data = array('text' => $group_title, 'children' => array()); // append users foreach (array_keys($users) as $user_id) { $users[$user_id] = $this->get_result($users[$user_id], $field, $options['post_id']); } // order by search if (!empty($args['s'])) { $users = acf_order_by_search($users, $args['s']); } // append to $data foreach ($users as $id => $title) { $data['children'][] = array('id' => $id, 'text' => $title); } // append to $r $r[] = $data; } // optgroup or single if (!empty($args['role']) && count($args['role']) == 1) { $r = $r[0]['children']; } // return return $r; }