Last active
January 30, 2026 15:28
-
-
Save yuriinalivaiko/4feaa1ee75d7bbbfde7949e03d56e7c9 to your computer and use it in GitHub Desktop.
Ultimate Member customization. Code snippets for the member directory.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| /** | |
| * Change the member directory "select" filter logic to AND (default usermeta table). | |
| * | |
| * @param mixed $field_query Filter query. | |
| * @param string $field Field meta mey. | |
| * @param array|string $value Filter values. | |
| * @param string $filter_type Filter type. | |
| * @return array Filter query. | |
| */ | |
| function um_member_directory_filter_AND( $field_query, $field, $value, $filter_type ) { | |
| if ( 'select' === $filter_type ) { | |
| $field_query = array( | |
| 'relation' => 'AND', | |
| ); | |
| foreach ( (array) $value as $single_val ) { | |
| $single_val = trim( stripslashes( $single_val ) ); | |
| if ( empty( $single_val ) ) { | |
| continue; | |
| } | |
| $arr_meta_query = array( | |
| 'relation' => 'OR', | |
| array( | |
| 'key' => $field, | |
| 'value' => $single_val, | |
| 'compare' => '=', | |
| ), | |
| array( | |
| 'key' => $field, | |
| 'value' => serialize( (string) $single_val ), | |
| 'compare' => 'LIKE', | |
| ), | |
| ); | |
| if ( is_numeric( $single_val ) ) { | |
| $arr_meta_query[] = array( | |
| 'key' => $field, | |
| 'value' => serialize( (int) $single_val ), | |
| 'compare' => 'LIKE', | |
| ); | |
| } | |
| array_push( $field_query, $arr_meta_query ); | |
| } | |
| } | |
| return $field_query; | |
| } | |
| add_filter( 'um_query_args_filter_global', 'um_member_directory_filter_AND', 10, 4 ); | |
| /** | |
| * Change the member directory "select" filter logic to AND (custom usermeta table). | |
| * | |
| * @global wpdb $wpdb WordPress database class. | |
| * @param bool $skip_default Skip default filter query. | |
| * @param um\core\Member_Directory_Meta $object UM member directory class. | |
| * @param string $field Field meta mey. | |
| * @param array|string $value Filter values. | |
| * @param string $filter_type Filter type. | |
| * @return bool Return true. | |
| */ | |
| function um_member_directory_meta_filter_AND( $skip_default, $object, $field, $value, $filter_type ) { | |
| if ( 'select' === $filter_type ) { | |
| global $wpdb; | |
| $join_alias = 'filter_' . esc_sql( $field ); | |
| $object->joins[] = $wpdb->prepare( | |
| "LEFT JOIN {$wpdb->prefix}um_metadata %i ON (%i.user_id = u.ID AND %i.um_key = %s)", | |
| $join_alias, | |
| $join_alias, | |
| $join_alias, | |
| $field | |
| ); | |
| $field_query = array(); | |
| foreach ( (array) $value as $single_val ) { | |
| $single_val = trim( stripslashes( $single_val ) ); | |
| if ( empty( $single_val ) ) { | |
| continue; | |
| } | |
| $arr_meta_query = array( | |
| $wpdb->prepare( '%i.um_value = %s', $join_alias, $single_val ), | |
| $wpdb->prepare( '%i.um_value LIKE %s', $join_alias, '%' . $wpdb->esc_like( serialize( (string) $single_val ) ) . '%' ), | |
| ); | |
| if ( is_numeric( $single_val ) ) { | |
| $arr_meta_query[] = $wpdb->prepare( '%i.um_value LIKE %s', $join_alias, '%' . $wpdb->esc_like( serialize( (int) $single_val ) ) . '%' ); | |
| } | |
| array_push( $field_query, '(' . implode( ' OR ', $arr_meta_query ) . ')' ); | |
| } | |
| $object->where_clauses[] = '(' . implode( ' AND ', $field_query ) . ')'; | |
| $skip_default = true; | |
| } | |
| return $skip_default; | |
| } | |
| add_filter( 'um_query_args_filter_global_meta', 'um_member_directory_meta_filter_AND', 10, 5 ); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| // Sort member directory filter options by values. | |
| add_filter( 'um_member_directory_filter_select_options_sorted', function( $options, $attrs ) { | |
| asort( $options ); | |
| return $options; | |
| }, 10, 2 ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment