diff --git a/includes/admin/templates/directory/search.php b/includes/admin/templates/directory/search.php index fa33f47c..1b1a3189 100644 --- a/includes/admin/templates/directory/search.php +++ b/includes/admin/templates/directory/search.php @@ -78,6 +78,15 @@ 'add_text' => __( 'Add New Custom Field','ultimate-member' ), 'show_default_number' => 1, ), + array( + 'id' => '_um_search_filters', + 'type' => 'text', + 'label' => __( 'Additional search filters', 'ultimate-member' ), + 'tooltip' => __( 'Additional search filters like URL parameters' ), + 'value' => UM()->query()->get_meta_value('_um_search_filters', null, '' ), + 'conditional' => array( '_um_search', '=', 1 ), + 'placeholder' => 'field1=val1&field2=val2' + ), array( 'id' => '_um_directory_header', 'type' => 'text', @@ -104,6 +113,6 @@ ) ) ) )->render_form(); ?> - +
\ No newline at end of file diff --git a/includes/class-config.php b/includes/class-config.php index e05eb15b..e6ee9b7d 100644 --- a/includes/class-config.php +++ b/includes/class-config.php @@ -149,6 +149,7 @@ if ( ! class_exists( 'um\Config' ) ) { '_um_profile_photo' => '1', '_um_cover_photos' => '1', '_um_show_name' => '1', + '_um_search_filters' => '', '_um_directory_header' => __('{total_users} Members','ultimate-member'), '_um_directory_header_single' => __('{total_users} Member','ultimate-member'), '_um_directory_no_users' => __('We are sorry. We cannot find any users who match your search criteria.','ultimate-member'), diff --git a/includes/core/um-filters-members.php b/includes/core/um-filters-members.php index 52285d33..bcb88071 100644 --- a/includes/core/um-filters-members.php +++ b/includes/core/um-filters-members.php @@ -100,6 +100,8 @@ add_filter( 'um_prepare_user_query_args', 'um_remove_special_users_from_list', 9 /** * Adds search parameters * + * @hooked 'um_prepare_user_query_args' + * * @param $query_args * @param $args * @@ -108,10 +110,21 @@ add_filter( 'um_prepare_user_query_args', 'um_remove_special_users_from_list', 9 function um_add_search_to_query( $query_args, $args ){ extract( $args ); + if( !empty( $args['search_filters'] ) ){ + $_REQUEST['um_search'] = 1; + } + if ( isset( $_REQUEST['um_search'] ) ) { $query = UM()->permalinks()->get_query_array(); + if( !empty( $args['search_filters'] ) ){ + parse_str( $args['search_filters'], $search_filters ); + if( $search_filters && is_array( $search_filters ) ){ + $query = array_merge( $search_filters, $query ); + } + } + // if searching if ( isset( $query['search'] ) ) { $query_args['search'] = '*' . um_filter_search( $query['search'] ) . '*'; @@ -154,7 +167,7 @@ function um_add_search_to_query( $query_args, $args ){ ) ); if ( in_array( $filter_data['attrs']['type'], $types ) ) { - + $arr_meta_query = array( array( 'key' => $field, @@ -383,7 +396,7 @@ function um_prepare_user_query_args( $query_args, $args ) { $sortby = str_replace('_asc','',$sortby); $order = 'ASC'; } - + $query_args['orderby'] = $sortby; } @@ -469,14 +482,14 @@ function um_modify_sortby_randomly( $query ) { if( isset( $_SESSION['seed'] ) ) { $seed = $_SESSION['seed']; } - + // Set new seed if none exists if ( ! $seed ) { $seed = rand(); $_SESSION['seed'] = $seed; } - + $query->query_orderby = 'ORDER by RAND('. $seed.')'; } @@ -498,7 +511,7 @@ function um_prepare_user_results_array( $result ) { } else { $result['no_users'] = 0; } - + return $result; } add_filter( 'um_prepare_user_results_array', 'um_prepare_user_results_array', 50, 2 );