diff --git a/assets/js/admin/forms.js b/assets/js/admin/forms.js index f1eecce0..4d3317e6 100644 --- a/assets/js/admin/forms.js +++ b/assets/js/admin/forms.js @@ -433,6 +433,14 @@ jQuery(document).ready( function() { addClass('um-forms-field um-long-field').removeClass('um-hidden-multi-selects').attr('id', list.data('id_attr') + '-' + k); }); + jQuery('.um-multi-selects-add-option[data-name="um_metadata[_um_search_exclude_fields][]"]').on('click', function() { + jQuery('.um-multi-selects-list[data-field_id="_um_search_include_fields"] li.um-multi-selects-option-line').remove(); + }); + + jQuery('.um-multi-selects-add-option[data-name="um_metadata[_um_search_include_fields][]"]').on('click', function() { + jQuery('.um-multi-selects-list[data-field_id="_um_search_exclude_fields"] li.um-multi-selects-option-line').remove(); + }); + var um_local_date = new Date(); var um_gmt_hours = -um_local_date.getTimezoneOffset() / 60; jQuery('input[name="um-gmt-offset"]').val( um_gmt_hours ); diff --git a/includes/admin/core/class-admin-metabox.php b/includes/admin/core/class-admin-metabox.php index e8d54a7c..c9e79f8b 100644 --- a/includes/admin/core/class-admin-metabox.php +++ b/includes/admin/core/class-admin-metabox.php @@ -1188,6 +1188,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { delete_post_meta( $post_id, '_um_reveal_fields' ); delete_post_meta( $post_id, '_um_search_fields' ); delete_post_meta( $post_id, '_um_search_exclude_fields' ); + delete_post_meta( $post_id, '_um_search_include_fields' ); delete_post_meta( $post_id, '_um_roles_can_search' ); delete_post_meta( $post_id, '_um_roles_can_filter' ); delete_post_meta( $post_id, '_um_show_these_users' ); diff --git a/includes/admin/templates/directory/search.php b/includes/admin/templates/directory/search.php index 95b4a2b0..7d78ef5c 100644 --- a/includes/admin/templates/directory/search.php +++ b/includes/admin/templates/directory/search.php @@ -11,6 +11,7 @@ $_um_roles_filter_value = get_post_meta( $post_id, '_um_roles_can_filter', true $_um_roles_filter_value = empty( $_um_roles_filter_value ) ? array() : $_um_roles_filter_value; $_um_search_exclude_fields = get_post_meta( $post_id, '_um_search_exclude_fields', true ); +$_um_search_include_fields = get_post_meta( $post_id, '_um_search_include_fields', true ); $_um_search_fields = get_post_meta( $post_id, '_um_search_fields', true ); $_um_search_filters = get_post_meta( $post_id, '_um_search_filters', true ); ?> @@ -50,6 +51,17 @@ $_um_search_filters = get_post_meta( $post_id, '_um_search_filters', true 'show_default_number' => 0, 'sorting' => true, ), + array( + 'id' => '_um_search_include_fields', + 'type' => 'multi_selects', + 'label' => __( 'Choose fields to include to search', 'ultimate-member' ), + 'value' => $_um_search_include_fields, + 'conditional' => array( '_um_filters', '=', 1 ), + 'options' => UM()->member_directory()->filter_fields, + 'add_text' => __( 'Add New Custom Field to Include', 'ultimate-member' ), + 'show_default_number' => 0, + 'sorting' => true, + ), array( 'id' => '_um_filters', 'type' => 'checkbox', diff --git a/includes/core/class-member-directory.php b/includes/core/class-member-directory.php index 5e96d1cc..ed0f1a0b 100644 --- a/includes/core/class-member-directory.php +++ b/includes/core/class-member-directory.php @@ -1712,22 +1712,30 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { $sql['where'] = str_replace( '#%&', '{' . $matches[0][0] . '}', $sql['where'] ); + $directory_id = $this->get_directory_by_hash( sanitize_key( $_POST['directory_id'] ) ); + $exclude_fields = get_post_meta( $directory_id, '_um_search_exclude_fields', true ); + $include_fields = get_post_meta( $directory_id, '_um_search_include_fields', true ); + if ( isset( $join_matches[1] ) ) { $meta_join_for_search = trim( $join_matches[1] ); // skip private invisible fields $custom_fields = array(); - foreach ( array_keys( UM()->builtin()->all_user_fields ) as $field_key ) { - if ( empty( $field_key ) ) { - continue; - } + if ( empty( $include_fields ) ) { + foreach ( array_keys( UM()->builtin()->all_user_fields ) as $field_key ) { + if ( empty( $field_key ) ) { + continue; + } - $data = UM()->fields()->get_field( $field_key ); - if ( ! um_can_view_field( $data ) ) { - continue; - } + $data = UM()->fields()->get_field( $field_key ); + if ( ! um_can_view_field( $data ) ) { + continue; + } - $custom_fields[] = $field_key; + $custom_fields[] = $field_key; + } + } else { + $custom_fields = $include_fields; } $custom_fields = apply_filters( 'um_general_search_custom_fields', $custom_fields ); @@ -1740,8 +1748,6 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { ); } - $directory_id = $this->get_directory_by_hash( sanitize_key( $_POST['directory_id'] ) ); - $exclude_fields = get_post_meta( $directory_id, '_um_search_exclude_fields', true ); if ( ! empty( $exclude_fields ) ) { foreach ( $exclude_fields as $field ) { $sql['join'] = str_replace( ",'" . $field . "'", '', $sql['join'] );