diff --git a/includes/core/class-member-directory-meta.php b/includes/core/class-member-directory-meta.php
index 4f321cf6..7b187931 100644
--- a/includes/core/class-member-directory-meta.php
+++ b/includes/core/class-member-directory-meta.php
@@ -328,7 +328,27 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
// phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- $join_alias is pre-escaped.
}
- $values = implode( ' OR ', $values_array );
+ /**
+ * Filters change select filter relation.
+ *
+ * @param {string} $relation.
+ * @param {string} $field field key.
+ *
+ * @return {string} relation.
+ *
+ * @since 2.8.5
+ * @hook um_members_directory_filter_select_meta
+ *
+ * @example
Change relation to 'AND'.
+ * function my_um_members_directory_filter_select_meta( $relation, $field ) {
+ * // your code here
+ * $relation = 'AND';
+ * return $relation;
+ * }
+ * add_filter( 'um_members_directory_filter_select_meta', 'my_um_members_directory_filter_select_meta', 10, 2 );
+ */
+ $relation = apply_filters( 'um_members_directory_filter_select_meta', 'OR', $field );
+ $values = implode( ' ' . esc_sql( $relation ) . ' ', $values_array );
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- $join_alias and $values variables are pre-escaped or $wpdb->prepare.
$this->where_clauses[] = $wpdb->prepare( "( {$join_alias}.um_key = %s AND ( {$values} ) )", $field );
diff --git a/includes/core/class-member-directory.php b/includes/core/class-member-directory.php
index 34f87665..a6acb377 100644
--- a/includes/core/class-member-directory.php
+++ b/includes/core/class-member-directory.php
@@ -1872,35 +1872,54 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
case 'select':
if ( is_array( $value ) ) {
- $field_query = array( 'relation' => 'OR' );
+ /**
+ * Filters change select filter relation.
+ *
+ * @param {array} $args query args.
+ * @param {string} $field field key.
+ *
+ * @return {array} query args.
+ *
+ * @since 2.8.5
+ * @hook um_members_directory_filter_select
+ *
+ * @example Change relation to 'AND'.
+ * function my_um_members_directory_filter_select( $args, $field ) {
+ * // your code here
+ * $args = array( 'relation' => 'AND' )
+ * return $args;
+ * }
+ * add_filter( 'um_members_directory_filter_select', 'my_um_members_directory_filter_select', 10, 2 );
+ */
+ $field_query = apply_filters( 'um_members_directory_filter_select', array( 'relation' => 'OR' ), $field );
foreach ( $value as $single_val ) {
$single_val = trim( stripslashes( $single_val ) );
$arr_meta_query = array(
array(
- 'key' => $field,
- 'value' => $single_val,
- 'compare' => '=',
+ 'key' => $field,
+ 'value' => $single_val,
+ 'compare' => '=',
),
array(
- 'key' => $field,
- 'value' => serialize( (string) $single_val ),
- 'compare' => 'LIKE',
+ 'key' => $field,
+ 'value' => serialize( (string) $single_val ),
+ 'compare' => 'LIKE',
),
array(
- 'key' => $field,
- 'value' => '"' . $single_val . '"',
- 'compare' => 'LIKE',
- )
+ 'key' => $field,
+ 'value' => '"' . $single_val . '"',
+ 'compare' => 'LIKE',
+ ),
);
if ( is_numeric( $single_val ) ) {
$arr_meta_query[] = array(
- 'key' => $field,
- 'value' => serialize( (int) $single_val ),
- 'compare' => 'LIKE',
+ 'key' => $field,
+ 'value' => serialize( absint( $single_val ) ),
+ 'compare' => 'LIKE',
);
}
@@ -2168,35 +2187,36 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
$value = array( $value );
}
- $field_query = array( 'relation' => 'OR' );
+ /** This filter is documented in includes/core/class-member-directory.php */
+ $field_query = apply_filters( 'um_members_directory_filter_select', array( 'relation' => 'OR' ), $field );
foreach ( $value as $single_val ) {
$single_val = trim( $single_val );
$arr_meta_query = array(
array(
- 'key' => $field,
- 'value' => $single_val,
- 'compare' => '=',
+ 'key' => $field,
+ 'value' => $single_val,
+ 'compare' => '=',
),
array(
- 'key' => $field,
- 'value' => serialize( (string) $single_val ),
- 'compare' => 'LIKE',
+ 'key' => $field,
+ 'value' => serialize( (string) $single_val ),
+ 'compare' => 'LIKE',
),
array(
- 'key' => $field,
- 'value' => '"' . $single_val . '"',
- 'compare' => 'LIKE',
- )
+ 'key' => $field,
+ 'value' => '"' . $single_val . '"',
+ 'compare' => 'LIKE',
+ ),
);
if ( is_numeric( $single_val ) ) {
$arr_meta_query[] = array(
- 'key' => $field,
- 'value' => serialize( (int) $single_val ),
- 'compare' => 'LIKE',
+ 'key' => $field,
+ 'value' => serialize( absint( $single_val ) ),
+ 'compare' => 'LIKE',
);
}