Skip to content

Instantly share code, notes, and snippets.

@yuriinalivaiko
Last active January 30, 2026 15:28
Show Gist options
  • Select an option

  • Save yuriinalivaiko/4feaa1ee75d7bbbfde7949e03d56e7c9 to your computer and use it in GitHub Desktop.

Select an option

Save yuriinalivaiko/4feaa1ee75d7bbbfde7949e03d56e7c9 to your computer and use it in GitHub Desktop.
Ultimate Member customization. Code snippets for the member directory.
<?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 );
<?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