The following code turns a standard BP Profile Search field into a dynamic dropdown search field. Dynamic means that the dropdown list contains only the values that users have actually selected in their profiles.
Let’s say your user profile contains a Country dropdown field with dozens of countries, but your users are only from a handful of them. When you add this code to your bp-custom.php file, the Country search field in your BP Profile Search form will only list the countries where at least one user can be found.
add_action ('bps_field_before_search_form', 'bps_dynamic_dropdown'); function bps_dynamic_dropdown ($f) { global $wpdb; $ids = array (2, 5); // IDs of the search fields that will become "dynamic dropdown" search fields if (empty ($f->id) || !in_array ($f->id, $ids)) return; $query = "SELECT DISTINCT value FROM {$wpdb->prefix}bp_xprofile_data WHERE field_id = {$f->id} ORDER BY value"; $values = $wpdb->get_col ($query); $f->options = array ('' => ''); foreach ($values as $value) { $value = stripslashes ($value); if ($value == '') continue; $f->options[$value] = $value; } $f->display = (count ($f->options) == 1)? 'none': 'selectbox'; }
Please note that the above code does not work for Check Box and Multi-Select Box profile field types, because their values are stored in serialized form.