diff --git a/includes/core/class-member-directory.php b/includes/core/class-member-directory.php index 81e79a6d..26a06e6e 100644 --- a/includes/core/class-member-directory.php +++ b/includes/core/class-member-directory.php @@ -1314,24 +1314,24 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { $this->query_args['paged'] = ! empty( $_POST['page'] ) ? absint( $_POST['page'] ) : 1; } - /** * Add sorting attributes for \WP_Users_Query * * @param array $directory_data Member Directory options */ - function sorting_query( $directory_data ) { + public function sorting_query( $directory_data ) { // sort members by $this->query_args['order'] = 'ASC'; + $sortby = ! empty( $_POST['sorting'] ) ? sanitize_text_field( $_POST['sorting'] ) : $directory_data['sortby']; - $sortby = ( $sortby == 'other' ) ? $directory_data['sortby_custom'] : $sortby; + $sortby = ( 'other' === $sortby ) ? $directory_data['sortby_custom'] : $sortby; $custom_sort = array(); if ( ! empty( $directory_data['sorting_fields'] ) ) { $sorting_fields = maybe_unserialize( $directory_data['sorting_fields'] ); foreach ( $sorting_fields as $field ) { if ( is_array( $field ) ) { - $field_keys = array_keys( $field ); + $field_keys = array_keys( $field ); $custom_sort[] = $field_keys[0]; } } @@ -1384,7 +1384,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { $this->query_args['order'] = 'ASC'; } - } elseif ( in_array( $sortby, array( 'last_name', 'first_name', 'nickname' ) ) ) { + } elseif ( in_array( $sortby, array( 'last_name', 'first_name', 'nickname' ), true ) ) { $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $sortby . '_c' => array( 'key' => $sortby, @@ -1426,7 +1426,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { $this->query_args['orderby'] = array( 'last_name_c' => 'ASC', 'first_name_c' => 'ASC' ); unset( $this->query_args['order'] ); - } elseif ( count( $numeric_sorting_keys ) && in_array( $sortby, $numeric_sorting_keys ) ) { + } elseif ( count( $numeric_sorting_keys ) && in_array( $sortby, $numeric_sorting_keys, true ) ) { $order = 'DESC'; if ( strstr( $sortby, '_desc' ) ) { @@ -1458,18 +1458,23 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { ) ); - $this->query_args['orderby'] = array( $sortby . '_ns' => $order, 'user_registered' => 'DESC' ); + $this->query_args['orderby'] = array( + $sortby . '_ns' => $order, + 'user_registered' => 'DESC', + ); unset( $this->query_args['order'] ); - } elseif ( ( ! empty( $directory_data['sortby_custom'] ) && $sortby == $directory_data['sortby_custom'] ) || in_array( $sortby, $custom_sort ) ) { + } elseif ( ( ! empty( $directory_data['sortby_custom'] ) && $sortby === $directory_data['sortby_custom'] ) || in_array( $sortby, $custom_sort, true ) ) { $custom_sort_order = ! empty( $directory_data['sortby_custom_order'] ) ? $directory_data['sortby_custom_order'] : 'ASC'; $meta_query = new \WP_Meta_Query(); $custom_sort_type = ! empty( $directory_data['sortby_custom_type'] ) ? $meta_query->get_cast_for_type( $directory_data['sortby_custom_type'] ) : 'CHAR'; + if ( ! empty( $directory_data['sorting_fields'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification -- already verified here $sorting = sanitize_text_field( $_POST['sorting'] ); - $sorting_fields = maybe_serialize( $directory_data['sorting_fields'] ); + $sorting_fields = maybe_unserialize( $directory_data['sorting_fields'] ); + if ( ! empty( $sorting_fields ) && is_array( $sorting_fields ) ) { foreach ( $sorting_fields as $field ) { if ( isset( $field[ $sorting ] ) ) { @@ -2629,14 +2634,13 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { // Prepare default user query values $this->query_args = array( - 'fields' => 'ids', - 'number' => 0, - 'meta_query' => array( - 'relation' => 'AND' + 'fields' => 'ids', + 'number' => 0, + 'meta_query' => array( + 'relation' => 'AND', ), ); - // handle different restrictions $this->restriction_options(); @@ -2770,7 +2774,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { $this->cover_size = apply_filters( 'um_member_directory_cover_image_size', $this->cover_size, $directory_data ); - $avatar_size = UM()->options()->get( 'profile_photosize' ); + $avatar_size = UM()->options()->get( 'profile_photosize' ); $this->avatar_size = str_replace( 'px', '', $avatar_size ); $this->avatar_size = apply_filters( 'um_member_directory_avatar_image_size', $this->avatar_size, $directory_data );