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, or to your favorite code snippets plugin, 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.