mirror of
https://github.com/10h30/ultimatemember.git
synced 2026-07-11 18:56:10 +09:00
- member directory filters;
This commit is contained in:
+45
-41
@@ -162,45 +162,43 @@ function um_ajax_get_members( directory, args ) {
|
||||
var local_date = new Date();
|
||||
var gmt_hours = -local_date.getTimezoneOffset()/60;
|
||||
|
||||
//var request =;
|
||||
var request = {
|
||||
directory_id: hash,
|
||||
page: page,
|
||||
search: search,
|
||||
sorting: sorting,
|
||||
nonce: um_scripts.nonce
|
||||
};
|
||||
|
||||
// if ( directory.find('.um-search-filter').length ) {
|
||||
// directory.find('.um-search-filter').each( function() {
|
||||
// var filter = jQuery(this);
|
||||
//
|
||||
// if ( filter.find( '.um-slider' ).length ) {
|
||||
// var filter_name = filter.find( '.um-slider' ).data('field_name');
|
||||
// var value = um_get_directory_storage( directory, 'filter_' + filter_name );
|
||||
// if ( value !== null ) {
|
||||
// request[ filter_name ] = value;
|
||||
// request['is_filters'] = true;
|
||||
// }
|
||||
// } else if ( filter.find( '.um-datepicker-filter' ).length ) {
|
||||
// var filter_name = filter.find( '.um-datepicker-filter' ).data('filter_name');
|
||||
// var value = um_get_directory_storage( directory, 'filter_' + filter_name );
|
||||
// if ( value !== null ) {
|
||||
// request[ filter_name ] = value;
|
||||
// request['is_filters'] = true;
|
||||
// }
|
||||
// } else {
|
||||
// var filter_name = filter.find('select').attr('name');
|
||||
// var value = um_get_directory_storage( directory, 'filter_' + filter_name );
|
||||
// if ( value !== null ) {
|
||||
// request[ filter_name ] = value;
|
||||
// request['is_filters'] = true;
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
if ( directory.find('.um-search-filter').length ) {
|
||||
directory.find('.um-search-filter').each( function() {
|
||||
var filter = jQuery(this);
|
||||
|
||||
if ( filter.find( '.um-slider' ).length ) {
|
||||
var filter_name = filter.find( '.um-slider' ).data('field_name');
|
||||
|
||||
var value = um_get_data_for_directory( directory, 'filter_' + filter_name );
|
||||
if ( typeof value != 'undefined' ) {
|
||||
request[ filter_name ] = value;
|
||||
}
|
||||
} else if ( filter.find( '.um-datepicker-filter' ).length ) {
|
||||
var filter_name = filter.find( '.um-datepicker-filter' ).data('filter_name');
|
||||
var value = um_get_data_for_directory( directory, 'filter_' + filter_name );
|
||||
if ( typeof value != 'undefined' ) {
|
||||
request[ filter_name ] = value;
|
||||
}
|
||||
} else {
|
||||
var filter_name = filter.find('select').attr('name');
|
||||
var value = um_get_data_for_directory( directory, 'filter_' + filter_name );
|
||||
if ( typeof value != 'undefined' ) {
|
||||
request[ filter_name ] = value;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
wp.ajax.send( 'um_get_members', {
|
||||
data: {
|
||||
directory_id: hash,
|
||||
page: page,
|
||||
search: search,
|
||||
sorting: sorting,
|
||||
nonce: um_scripts.nonce
|
||||
},
|
||||
data: request,
|
||||
success: function( answer ) {
|
||||
//set last data hard for using on layouts reloading
|
||||
um_member_directory_last_data[ hash ] = answer;
|
||||
@@ -1065,23 +1063,29 @@ jQuery(document).ready( function() {
|
||||
|
||||
var filter_name = jQuery(this).prop('name');
|
||||
|
||||
var current_value = um_get_directory_storage( directory, 'filter_' + filter_name );
|
||||
if ( current_value === null ) {
|
||||
var current_value = um_get_data_for_directory( directory, 'filter_' + filter_name );
|
||||
if ( typeof current_value == 'undefined' ) {
|
||||
current_value = [];
|
||||
} else {
|
||||
current_value = current_value.split( '||' );
|
||||
}
|
||||
|
||||
if ( -1 === jQuery.inArray( jQuery(this).val(), current_value ) ) {
|
||||
current_value.push( jQuery(this).val() );
|
||||
um_set_directory_storage( directory, 'filter_' + filter_name, current_value, true );
|
||||
current_value = current_value.join( '||' );
|
||||
|
||||
um_set_url_from_data( directory, 'filter_' + filter_name, current_value );
|
||||
|
||||
//set 1st page after filtration
|
||||
um_set_directory_storage( directory, 'page', 1, true );
|
||||
directory.data( 'page', 1 );
|
||||
um_set_url_from_data( directory, 'page', 1 );
|
||||
}
|
||||
|
||||
jQuery(this).val('').trigger('change');
|
||||
|
||||
um_ajax_get_members( directory );
|
||||
|
||||
um_change_tag( directory );
|
||||
//um_change_tag( directory );
|
||||
|
||||
});
|
||||
|
||||
|
||||
@@ -998,281 +998,312 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
*/
|
||||
function filters( $args ) {
|
||||
//filters
|
||||
$query = $_POST;
|
||||
if ( ! empty( $args['search_filters'] ) ) {
|
||||
parse_str( $args['search_filters'], $search_filters );
|
||||
$filter_query = array();
|
||||
if ( ! empty( $args['search_fields'] ) ) {
|
||||
$search_filters = maybe_unserialize( $args['search_fields'] );
|
||||
if ( ! empty( $search_filters ) && is_array( $search_filters ) ) {
|
||||
$query = array_merge( $search_filters, $query );
|
||||
$filter_query = array_intersect_key( $_POST, array_flip( $search_filters ) );
|
||||
}
|
||||
}
|
||||
|
||||
unset( $query['search'] );
|
||||
unset( $query['directory_id'] );
|
||||
unset( $query['sorting'] );
|
||||
unset( $query['page'] );
|
||||
unset( $query['args'] );
|
||||
unset( $query['members_page'] );
|
||||
unset( $query['action'] );
|
||||
unset( $query['nonce'] );
|
||||
unset( $query['referrer_url'] );
|
||||
unset( $query['is_filters'] );
|
||||
if ( empty( $filter_query ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! empty( $query ) && is_array( $query ) ) {
|
||||
foreach ( $query as $field => $value ) {
|
||||
$query = $_POST;
|
||||
|
||||
//$filter_data = UM()->members()->prepare_filter( $field );
|
||||
foreach ( $filter_query as $field => $value ) {
|
||||
|
||||
if ( $value && $field != 'um_search' && $field != 'page_id' ) {
|
||||
switch ( $field ) {
|
||||
default:
|
||||
$value = explode( '||', $value );
|
||||
|
||||
if ( strstr( $field, 'role_' ) ) {
|
||||
$field = 'role';
|
||||
}
|
||||
if ( is_array( $value ) ) {
|
||||
$field_query = array( 'relation' => 'OR' );
|
||||
|
||||
if ( ! in_array( $field, UM()->members()->core_search_fields ) ) {
|
||||
|
||||
if ( 'role' == $field ) {
|
||||
|
||||
if ( ! empty( $this->query_args['role__in'] ) ) {
|
||||
$value = array_map('strtolower', $value);
|
||||
|
||||
$this->query_args['role__in'] = is_array( $this->query_args['role__in'] ) ? $this->query_args['role__in'] : array( $this->query_args['role__in'] );
|
||||
$default_role = array_intersect( $this->query_args['role__in'], $value );
|
||||
$um_role = array_diff( $value, $default_role );
|
||||
|
||||
foreach ($um_role as $key => &$val) {
|
||||
$val = 'um_' . str_replace(' ', '-', $val);
|
||||
}
|
||||
$this->query_args['role__in'] = array_merge( $default_role, $um_role );
|
||||
} else {
|
||||
$this->query_args['role__in'] = $value;
|
||||
};
|
||||
|
||||
} elseif ( 'birth_date' == $field ) {
|
||||
$from_date = date( 'Y-m-d', mktime( 0,0,0, 1, 1, date('Y', time() - ($query['birth_date'][0] -1)*YEAR_IN_SECONDS ) ) );
|
||||
$to_date = date( 'Y-m-d', mktime( 0,0,0, 1, 1, date('Y', time() - ($query['birth_date'][1] +1)*YEAR_IN_SECONDS ) ) );
|
||||
|
||||
$meta_query = array(
|
||||
foreach ( $value as $single_val ) {
|
||||
$arr_meta_query = array(
|
||||
array(
|
||||
'key' => 'birth_date',
|
||||
'value' => array( $to_date, $from_date ),
|
||||
'compare' => 'BETWEEN',
|
||||
'type' => 'DATE',
|
||||
'inclusive' => true,
|
||||
'key' => $field,
|
||||
'value' => trim( $single_val ),
|
||||
'compare' => '=',
|
||||
),
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => serialize( strval( trim( $single_val ) ) ),
|
||||
'compare' => 'LIKE',
|
||||
),
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => '"' . trim( $single_val ) . '"',
|
||||
'compare' => 'LIKE',
|
||||
)
|
||||
);
|
||||
|
||||
$this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) );
|
||||
if ( is_numeric( $single_val ) ) {
|
||||
|
||||
} elseif ( 'user_registered' == $field ) {
|
||||
|
||||
$offset = 0;
|
||||
|
||||
if( isset( $query['gmt_offset'] ) ) {
|
||||
$offset = (int)$query['gmt_offset'];
|
||||
}
|
||||
|
||||
if( isset( $query['user_registered']['from'] ) ) {
|
||||
$from_date = date( 'Y-m-d', strtotime( date( 'Y-m-d H:s:i', $query['user_registered']['from'] ) . "+$offset hours" ) );
|
||||
}
|
||||
|
||||
if( isset( $query['user_registered']['to'] ) ) {
|
||||
$to_date = date( 'Y-m-d', strtotime( date( 'Y-m-d H:s:i', $query['user_registered']['to'] ) . "+$offset hours" ) );
|
||||
}
|
||||
|
||||
$date_query = array(
|
||||
array(
|
||||
'column' => 'user_registered',
|
||||
'before' => $to_date,
|
||||
'after' => $from_date,
|
||||
'inclusive' => true,
|
||||
),
|
||||
);
|
||||
|
||||
$this->query_args['date_query'] = array( $date_query );
|
||||
|
||||
} elseif ( 'last_login' == $field ) {
|
||||
|
||||
$meta_query = array();
|
||||
$offset = 0;
|
||||
|
||||
if( isset( $query['gmt_offset'] ) ) {
|
||||
$offset = (int)$query['gmt_offset'];
|
||||
}
|
||||
|
||||
if( isset( $query['last_login']['from'] ) and isset( $query['last_login']['to'] ) ) {
|
||||
$from_date = (int)$query['last_login']['from'] + ( $offset * 60 * 60 ); // client time zone offset
|
||||
$to_date = (int)$query['last_login']['to'] + ( $offset * 60 * 60 ) + (24 * 60 * 60 - 1); // time 23:59
|
||||
|
||||
$meta_query[] = array(
|
||||
'key' => '_um_last_login',
|
||||
'value' => array( $from_date, $to_date ),
|
||||
'compare' => 'BETWEEN',
|
||||
$arr_meta_query[] = array(
|
||||
'key' => $field,
|
||||
'value' => serialize( intval( trim( $single_val ) ) ),
|
||||
'compare' => 'LIKE',
|
||||
);
|
||||
|
||||
} else {
|
||||
|
||||
if( isset( $query['last_login']['from'] ) ) {
|
||||
$from_date = (int)$query['last_login']['from'] + ( $offset * 60 * 60 );
|
||||
|
||||
$meta_query[] = array(
|
||||
'key' => '_um_last_login',
|
||||
'value' => $from_date,
|
||||
'compare' => '>',
|
||||
);
|
||||
}
|
||||
|
||||
if( isset( $query['last_login']['to'] ) ) {
|
||||
$to_date = (int)$query['last_login']['to'] + ( $offset * 60 * 60 ) + (24 * 60 * 60 - 1);
|
||||
|
||||
$meta_query[] = array(
|
||||
'key' => '_um_last_login',
|
||||
'value' => $to_date,
|
||||
'compare' => '<',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) );
|
||||
|
||||
} elseif( 'gmt_offset' == $field ) {
|
||||
continue;
|
||||
} else {
|
||||
|
||||
if ( is_array( $value ) ) {
|
||||
$field_query = array( 'relation' => 'OR' );
|
||||
|
||||
foreach ( $value as $single_val ) {
|
||||
$field_query = array_merge( $field_query, array(
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => trim( $single_val ),
|
||||
'compare' => '=',
|
||||
)
|
||||
) );
|
||||
|
||||
$types = apply_filters( 'um_search_field_types', array(
|
||||
'multiselect',
|
||||
'radio',
|
||||
'checkbox'
|
||||
) );
|
||||
|
||||
//if ( in_array( $filter_data['attrs']['type'], $types ) ) {
|
||||
|
||||
$arr_meta_query = array(
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => serialize( strval( trim( $single_val ) ) ),
|
||||
'compare' => 'LIKE',
|
||||
),
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => '"' . trim( $single_val ) . '"',
|
||||
'compare' => 'LIKE',
|
||||
)
|
||||
);
|
||||
|
||||
if ( is_numeric( $single_val ) ) {
|
||||
|
||||
$arr_meta_query[ ] = array(
|
||||
'key' => $field,
|
||||
'value' => serialize( intval( trim( $single_val ) ) ),
|
||||
'compare' => 'LIKE',
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
$field_query = array_merge( $field_query, $arr_meta_query );
|
||||
//}
|
||||
}
|
||||
} else {
|
||||
$field_query = array(
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => trim( $value ),
|
||||
'compare' => '=',
|
||||
),
|
||||
'relation' => 'OR',
|
||||
);
|
||||
|
||||
$types = apply_filters( 'um_search_field_types', array(
|
||||
'multiselect',
|
||||
'radio',
|
||||
'checkbox'
|
||||
) );
|
||||
|
||||
//if ( in_array( $filter_data['attrs']['type'], $types ) ) {
|
||||
|
||||
$arr_meta_query = array(
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => serialize( strval( trim( $value ) ) ),
|
||||
'compare' => 'LIKE',
|
||||
),
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => '"' . trim( $value ) . '"',
|
||||
'compare' => 'LIKE',
|
||||
)
|
||||
);
|
||||
|
||||
if ( is_numeric( $value ) ) {
|
||||
|
||||
$arr_meta_query[ ] = array(
|
||||
'key' => $field,
|
||||
'value' => serialize( intval( trim( $value ) ) ),
|
||||
'compare' => 'LIKE',
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
$field_query = array_merge( $field_query, $arr_meta_query );
|
||||
//}
|
||||
}
|
||||
|
||||
/**
|
||||
* UM hook
|
||||
*
|
||||
* @type filter
|
||||
* @title um_query_args_{$field}__filter
|
||||
* @description Change field's query for search at Members Directory
|
||||
* @input_vars
|
||||
* [{"var":"$field_query","type":"array","desc":"Field query"}]
|
||||
* @change_log
|
||||
* ["Since: 2.0"]
|
||||
* @usage
|
||||
* <?php add_filter( 'um_query_args_{$field}__filter', 'function_name', 10, 1 ); ?>
|
||||
* @example
|
||||
* <?php
|
||||
* add_filter( 'um_query_args_{$field}__filter', 'my_query_args_filter', 10, 1 );
|
||||
* function my_query_args_filter( $field_query ) {
|
||||
* // your code here
|
||||
* return $field_query;
|
||||
* }
|
||||
* ?>
|
||||
*/
|
||||
$field_query = apply_filters( "um_query_args_{$field}__filter", $field_query );
|
||||
$this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $field_query ) );
|
||||
$field_query = array_merge( $field_query, $arr_meta_query );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* UM hook
|
||||
*
|
||||
* @type filter
|
||||
* @title um_query_args_{$field}__filter
|
||||
* @description Change field's query for search at Members Directory
|
||||
* @input_vars
|
||||
* [{"var":"$field_query","type":"array","desc":"Field query"}]
|
||||
* @change_log
|
||||
* ["Since: 2.0"]
|
||||
* @usage
|
||||
* <?php add_filter( 'um_query_args_{$field}__filter', 'function_name', 10, 1 ); ?>
|
||||
* @example
|
||||
* <?php
|
||||
* add_filter( 'um_query_args_{$field}__filter', 'my_query_args_filter', 10, 1 );
|
||||
* function my_query_args_filter( $field_query ) {
|
||||
* // your code here
|
||||
* return $field_query;
|
||||
* }
|
||||
* ?>
|
||||
*/
|
||||
$field_query = apply_filters( "um_query_args_{$field}__filter", $field_query );
|
||||
$this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $field_query ) );
|
||||
|
||||
break;
|
||||
case 'role':
|
||||
$value = explode( '||', $value );
|
||||
$value = array_map( 'strtolower', $value );
|
||||
|
||||
if ( ! empty( $this->query_args['role__in'] ) ) {
|
||||
$this->query_args['role__in'] = is_array( $this->query_args['role__in'] ) ? $this->query_args['role__in'] : array( $this->query_args['role__in'] );
|
||||
$default_role = array_intersect( $this->query_args['role__in'], $value );
|
||||
$um_role = array_diff( $value, $default_role );
|
||||
|
||||
foreach ( $um_role as $key => &$val ) {
|
||||
$val = 'um_' . str_replace( ' ', '-', $val );
|
||||
}
|
||||
$this->query_args['role__in'] = array_merge( $default_role, $um_role );
|
||||
} else {
|
||||
$this->query_args['role__in'] = $value;
|
||||
};
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$query = UM()->permalinks()->get_query_array();
|
||||
$arr_columns = array();
|
||||
|
||||
foreach ( UM()->members()->core_search_fields as $key ) {
|
||||
if ( ! empty( $query[ $key ] ) ) {
|
||||
$arr_columns[] = $key;
|
||||
$this->query_args['search'] = '*' . $query[ $key ] .'*';
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! empty( $arr_columns ) ) {
|
||||
$this->query_args['search_columns'] = $arr_columns;
|
||||
// if ( 'role' == $field ) {
|
||||
//
|
||||
// if ( ! empty( $this->query_args['role__in'] ) ) {
|
||||
// $value = array_map('strtolower', $value);
|
||||
//
|
||||
// $this->query_args['role__in'] = is_array( $this->query_args['role__in'] ) ? $this->query_args['role__in'] : array( $this->query_args['role__in'] );
|
||||
// $default_role = array_intersect( $this->query_args['role__in'], $value );
|
||||
// $um_role = array_diff( $value, $default_role );
|
||||
//
|
||||
// foreach ($um_role as $key => &$val) {
|
||||
// $val = 'um_' . str_replace(' ', '-', $val);
|
||||
// }
|
||||
// $this->query_args['role__in'] = array_merge( $default_role, $um_role );
|
||||
// } else {
|
||||
// $this->query_args['role__in'] = $value;
|
||||
// };
|
||||
//
|
||||
// } elseif ( 'birth_date' == $field ) {
|
||||
// $from_date = date( 'Y-m-d', mktime( 0,0,0, 1, 1, date('Y', time() - ($query['birth_date'][0] -1)*YEAR_IN_SECONDS ) ) );
|
||||
// $to_date = date( 'Y-m-d', mktime( 0,0,0, 1, 1, date('Y', time() - ($query['birth_date'][1] +1)*YEAR_IN_SECONDS ) ) );
|
||||
//
|
||||
// $meta_query = array(
|
||||
// array(
|
||||
// 'key' => 'birth_date',
|
||||
// 'value' => array( $to_date, $from_date ),
|
||||
// 'compare' => 'BETWEEN',
|
||||
// 'type' => 'DATE',
|
||||
// 'inclusive' => true,
|
||||
// )
|
||||
// );
|
||||
//
|
||||
// $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) );
|
||||
//
|
||||
// } elseif ( 'user_registered' == $field ) {
|
||||
//
|
||||
// $offset = 0;
|
||||
//
|
||||
// if( isset( $query['gmt_offset'] ) ) {
|
||||
// $offset = (int)$query['gmt_offset'];
|
||||
// }
|
||||
//
|
||||
// if( isset( $query['user_registered']['from'] ) ) {
|
||||
// $from_date = date( 'Y-m-d', strtotime( date( 'Y-m-d H:s:i', $query['user_registered']['from'] ) . "+$offset hours" ) );
|
||||
// }
|
||||
//
|
||||
// if( isset( $query['user_registered']['to'] ) ) {
|
||||
// $to_date = date( 'Y-m-d', strtotime( date( 'Y-m-d H:s:i', $query['user_registered']['to'] ) . "+$offset hours" ) );
|
||||
// }
|
||||
//
|
||||
// $date_query = array(
|
||||
// array(
|
||||
// 'column' => 'user_registered',
|
||||
// 'before' => $to_date,
|
||||
// 'after' => $from_date,
|
||||
// 'inclusive' => true,
|
||||
// ),
|
||||
// );
|
||||
//
|
||||
// $this->query_args['date_query'] = array( $date_query );
|
||||
//
|
||||
// } elseif ( 'last_login' == $field ) {
|
||||
//
|
||||
// $meta_query = array();
|
||||
// $offset = 0;
|
||||
//
|
||||
// if( isset( $query['gmt_offset'] ) ) {
|
||||
// $offset = (int)$query['gmt_offset'];
|
||||
// }
|
||||
//
|
||||
// if( isset( $query['last_login']['from'] ) and isset( $query['last_login']['to'] ) ) {
|
||||
// $from_date = (int)$query['last_login']['from'] + ( $offset * 60 * 60 ); // client time zone offset
|
||||
// $to_date = (int)$query['last_login']['to'] + ( $offset * 60 * 60 ) + (24 * 60 * 60 - 1); // time 23:59
|
||||
//
|
||||
// $meta_query[] = array(
|
||||
// 'key' => '_um_last_login',
|
||||
// 'value' => array( $from_date, $to_date ),
|
||||
// 'compare' => 'BETWEEN',
|
||||
// );
|
||||
//
|
||||
// } else {
|
||||
//
|
||||
// if( isset( $query['last_login']['from'] ) ) {
|
||||
// $from_date = (int)$query['last_login']['from'] + ( $offset * 60 * 60 );
|
||||
//
|
||||
// $meta_query[] = array(
|
||||
// 'key' => '_um_last_login',
|
||||
// 'value' => $from_date,
|
||||
// 'compare' => '>',
|
||||
// );
|
||||
// }
|
||||
//
|
||||
// if( isset( $query['last_login']['to'] ) ) {
|
||||
// $to_date = (int)$query['last_login']['to'] + ( $offset * 60 * 60 ) + (24 * 60 * 60 - 1);
|
||||
//
|
||||
// $meta_query[] = array(
|
||||
// 'key' => '_um_last_login',
|
||||
// 'value' => $to_date,
|
||||
// 'compare' => '<',
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) );
|
||||
//
|
||||
// } elseif( 'gmt_offset' == $field ) {
|
||||
// continue;
|
||||
// } else {
|
||||
//
|
||||
// if ( is_array( $value ) ) {
|
||||
// $field_query = array( 'relation' => 'OR' );
|
||||
//
|
||||
// foreach ( $value as $single_val ) {
|
||||
// $field_query = array_merge( $field_query, array(
|
||||
// array(
|
||||
// 'key' => $field,
|
||||
// 'value' => trim( $single_val ),
|
||||
// 'compare' => '=',
|
||||
// )
|
||||
// ) );
|
||||
//
|
||||
// $types = apply_filters( 'um_search_field_types', array(
|
||||
// 'multiselect',
|
||||
// 'radio',
|
||||
// 'checkbox'
|
||||
// ) );
|
||||
//
|
||||
// //if ( in_array( $filter_data['attrs']['type'], $types ) ) {
|
||||
//
|
||||
// $arr_meta_query = array(
|
||||
// array(
|
||||
// 'key' => $field,
|
||||
// 'value' => serialize( strval( trim( $single_val ) ) ),
|
||||
// 'compare' => 'LIKE',
|
||||
// ),
|
||||
// array(
|
||||
// 'key' => $field,
|
||||
// 'value' => '"' . trim( $single_val ) . '"',
|
||||
// 'compare' => 'LIKE',
|
||||
// )
|
||||
// );
|
||||
//
|
||||
// if ( is_numeric( $single_val ) ) {
|
||||
//
|
||||
// $arr_meta_query[ ] = array(
|
||||
// 'key' => $field,
|
||||
// 'value' => serialize( intval( trim( $single_val ) ) ),
|
||||
// 'compare' => 'LIKE',
|
||||
// );
|
||||
//
|
||||
// }
|
||||
//
|
||||
// $field_query = array_merge( $field_query, $arr_meta_query );
|
||||
// //}
|
||||
// }
|
||||
// } else {
|
||||
// $field_query = array(
|
||||
// array(
|
||||
// 'key' => $field,
|
||||
// 'value' => trim( $value ),
|
||||
// 'compare' => '=',
|
||||
// ),
|
||||
// 'relation' => 'OR',
|
||||
// );
|
||||
//
|
||||
// $types = apply_filters( 'um_search_field_types', array(
|
||||
// 'multiselect',
|
||||
// 'radio',
|
||||
// 'checkbox'
|
||||
// ) );
|
||||
//
|
||||
// //if ( in_array( $filter_data['attrs']['type'], $types ) ) {
|
||||
//
|
||||
// $arr_meta_query = array(
|
||||
// array(
|
||||
// 'key' => $field,
|
||||
// 'value' => serialize( strval( trim( $value ) ) ),
|
||||
// 'compare' => 'LIKE',
|
||||
// ),
|
||||
// array(
|
||||
// 'key' => $field,
|
||||
// 'value' => '"' . trim( $value ) . '"',
|
||||
// 'compare' => 'LIKE',
|
||||
// )
|
||||
// );
|
||||
//
|
||||
// if ( is_numeric( $value ) ) {
|
||||
//
|
||||
// $arr_meta_query[ ] = array(
|
||||
// 'key' => $field,
|
||||
// 'value' => serialize( intval( trim( $value ) ) ),
|
||||
// 'compare' => 'LIKE',
|
||||
// );
|
||||
//
|
||||
// }
|
||||
//
|
||||
// $field_query = array_merge( $field_query, $arr_meta_query );
|
||||
// //}
|
||||
// }
|
||||
//
|
||||
// $field_query = apply_filters( "um_query_args_{$field}__filter", $field_query );
|
||||
// $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $field_query ) );
|
||||
// }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1369,7 +1400,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
|
||||
$this->general_search();
|
||||
|
||||
//$this->filters( $args );
|
||||
$this->filters( $args );
|
||||
|
||||
/**
|
||||
* UM hook
|
||||
|
||||
@@ -102,190 +102,6 @@ function um_remove_special_users_from_list( $query_args, $args ) {
|
||||
//add_filter( 'um_prepare_user_query_args', 'um_remove_special_users_from_list', 99, 2 );
|
||||
|
||||
|
||||
/**
|
||||
* Adds search parameters
|
||||
*
|
||||
* @hooked 'um_prepare_user_query_args'
|
||||
*
|
||||
* @param $query_args
|
||||
* @param $args
|
||||
*
|
||||
* @return mixed|void
|
||||
*/
|
||||
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'] ) . '*';
|
||||
unset( $query['search'] );
|
||||
}
|
||||
|
||||
if ( $query && is_array( $query ) ) {
|
||||
foreach ( $query as $field => $value ) {
|
||||
|
||||
if ( in_array( $field, array( 'members_page' ) ) ) continue;
|
||||
|
||||
$serialize_value = serialize( strval( $value ) );
|
||||
|
||||
if ( $value && $field != 'um_search' && $field != 'page_id' ) {
|
||||
|
||||
if ( strstr( $field, 'role_' ) )
|
||||
$field = 'role';
|
||||
|
||||
if ( ! in_array( $field, UM()->members()->core_search_fields ) ) {
|
||||
|
||||
if ( 'role' == $field ) {
|
||||
$query_args['role__in'] = trim( $value );
|
||||
} else {
|
||||
$filter_data = UM()->members()->prepare_filter( $field );
|
||||
if ( $filter_data['type'] == 'select' ) {
|
||||
$field_query = array(
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => trim( $value ),
|
||||
'compare' => '=',
|
||||
),
|
||||
'relation' => 'OR',
|
||||
);
|
||||
|
||||
|
||||
$types = apply_filters( 'um_search_field_types', array(
|
||||
'multiselect',
|
||||
'radio',
|
||||
'checkbox'
|
||||
) );
|
||||
|
||||
if ( in_array( $filter_data['attrs']['type'], $types ) ) {
|
||||
|
||||
$arr_meta_query = array(
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => serialize( strval( trim( $value ) ) ),
|
||||
'compare' => 'LIKE',
|
||||
),
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => '"' . trim( $value ) . '"',
|
||||
'compare' => 'LIKE',
|
||||
)
|
||||
);
|
||||
|
||||
if( is_numeric( $value ) ){
|
||||
|
||||
$arr_meta_query[ ] = array(
|
||||
'key' => $field,
|
||||
'value' => serialize( intval( trim( $value ) ) ),
|
||||
'compare' => 'LIKE',
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
$field_query = array_merge( $field_query, $arr_meta_query );
|
||||
}
|
||||
|
||||
} else {
|
||||
$field_query = array(
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => trim( $value ),
|
||||
'compare' => '=',
|
||||
),
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => trim( $value ),
|
||||
'compare' => 'LIKE',
|
||||
),
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => trim( $serialize_value ),
|
||||
'compare' => 'LIKE',
|
||||
),
|
||||
'relation' => 'OR',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* UM hook
|
||||
*
|
||||
* @type filter
|
||||
* @title um_query_args_{$field}__filter
|
||||
* @description Change field's query for search at Members Directory
|
||||
* @input_vars
|
||||
* [{"var":"$field_query","type":"array","desc":"Field query"}]
|
||||
* @change_log
|
||||
* ["Since: 2.0"]
|
||||
* @usage
|
||||
* <?php add_filter( 'um_query_args_{$field}__filter', 'function_name', 10, 1 ); ?>
|
||||
* @example
|
||||
* <?php
|
||||
* add_filter( 'um_query_args_{$field}__filter', 'my_query_args_filter', 10, 1 );
|
||||
* function my_query_args_filter( $field_query ) {
|
||||
* // your code here
|
||||
* return $field_query;
|
||||
* }
|
||||
* ?>
|
||||
*/
|
||||
$field_query = apply_filters( "um_query_args_{$field}__filter", $field_query );
|
||||
$query_args['meta_query'][] = $field_query;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* UM hook
|
||||
*
|
||||
* @type filter
|
||||
* @title um_query_args_filter
|
||||
* @description Change query for search at Members Directory
|
||||
* @input_vars
|
||||
* [{"var":"$query_args","type":"array","desc":"Query Arguments"}]
|
||||
* @change_log
|
||||
* ["Since: 2.0"]
|
||||
* @usage
|
||||
* <?php add_filter( 'um_query_args_filter', 'function_name', 10, 1 ); ?>
|
||||
* @example
|
||||
* <?php
|
||||
* add_filter( 'um_query_args_filter', 'my_query_args_filter', 10, 1 );
|
||||
* function my_query_args_filter( $query_args ) {
|
||||
* // your code here
|
||||
* return $query_args;
|
||||
* }
|
||||
* ?>
|
||||
*/
|
||||
$query_args = apply_filters( 'um_query_args_filter', $query_args );
|
||||
|
||||
if ( isset( $query_args['meta_query'] ) && count( $query_args['meta_query'] ) == 1 )
|
||||
unset( $query_args['meta_query'] );
|
||||
|
||||
return $query_args;
|
||||
|
||||
}
|
||||
//add_filter( 'um_prepare_user_query_args', 'um_add_search_to_query', 50, 2 );
|
||||
|
||||
|
||||
/**
|
||||
* Adds main parameters
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user