From 36268e85babfdcfd424bb4ad549eca35baf105f0 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Tue, 23 May 2023 18:25:53 +0300 Subject: [PATCH] - add default sorting --- includes/admin/class-admin.php | 6 ++++ .../admin/templates/directory/sorting.php | 33 +++++++++++++++++++ includes/core/class-fields.php | 2 ++ includes/core/class-member-directory.php | 7 ++-- 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/includes/admin/class-admin.php b/includes/admin/class-admin.php index b6c7bbaf..742e2015 100644 --- a/includes/admin/class-admin.php +++ b/includes/admin/class-admin.php @@ -389,6 +389,12 @@ if ( ! class_exists( 'um\admin\Admin' ) ) { '_um_sortby_custom_label' => array( 'sanitize' => 'text', ), + '_um_sortby_custom_type' => array( + 'sanitize' => 'text', + ), + '_um_sortby_custom_order' => array( + 'sanitize' => 'text', + ), '_um_enable_sorting' => array( 'sanitize' => 'bool', ), diff --git a/includes/admin/templates/directory/sorting.php b/includes/admin/templates/directory/sorting.php index b7f7832a..6a33522b 100644 --- a/includes/admin/templates/directory/sorting.php +++ b/includes/admin/templates/directory/sorting.php @@ -7,6 +7,18 @@ global $post_id; $_um_sorting_fields = get_post_meta( $post_id, '_um_sorting_fields', true ); $_um_sorting_fields = empty( $_um_sorting_fields ) ? array() : $_um_sorting_fields; +$custom_type_options = array( + 'CHAR' => 'CHAR', + 'NUMERIC' => 'NUMERIC', + 'BINARY' => 'BINARY', + 'DATE' => 'DATE', + 'DATETIME' => 'DATETIME', + 'DECIMAL' => 'DECIMAL', + 'SIGNED' => 'SIGNED', + 'TIME' => 'TIME', + 'UNSIGNED' => 'UNSIGNED', +); + $fields = array( array( 'id' => '_um_sortby', @@ -24,6 +36,27 @@ $fields = array( 'value' => UM()->query()->get_meta_value( '_um_sortby_custom', null, 'na' ), 'conditional' => array( '_um_sortby', '=', 'other' ), ), + array( + 'id' => '_um_sortby_custom_type', + 'type' => 'select', + 'label' => __( 'Data type', 'ultimate-member' ), + 'tooltip' => __( 'To correct sort by a custom field, choose a data type', 'ultimate-member' ), + 'value' => UM()->query()->get_meta_value( '_um_sortby_custom_type', null, 'CHAR' ), + 'options' => $custom_type_options, + 'conditional' => array( '_um_sortby', '=', 'other' ), + ), + array( + 'id' => '_um_sortby_custom_order', + 'type' => 'select', + 'label' => __( 'Order', 'ultimate-member' ), + 'tooltip' => __( 'To correct sort by a custom field, choose an order', 'ultimate-member' ), + 'value' => UM()->query()->get_meta_value( '_um_sortby_custom_order', null, 'ASC' ), + 'options' => array( + 'ASC' => 'ASC', + 'DESC' => 'DESC', + ), + 'conditional' => array( '_um_sortby', '=', 'other' ), + ), array( 'id' => '_um_sortby_custom_label', 'type' => 'text', diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index 596b9052..34930ce5 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -388,6 +388,8 @@ if ( ! class_exists( 'um\core\Fields' ) ) { } update_post_meta( $directory_id, '_um_sortby_custom', '' ); update_post_meta( $directory_id, '_um_sortby_custom_label', '' ); + update_post_meta( $directory_id, '_um_sortby_custom_type', '' ); + update_post_meta( $directory_id, '_um_sortby_custom_order', '' ); } } diff --git a/includes/core/class-member-directory.php b/includes/core/class-member-directory.php index b04cbca9..090a5bdf 100644 --- a/includes/core/class-member-directory.php +++ b/includes/core/class-member-directory.php @@ -1423,7 +1423,8 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { } elseif ( ( ! empty( $directory_data['sortby_custom'] ) && $sortby == $directory_data['sortby_custom'] ) || in_array( $sortby, $custom_sort ) ) { - $custom_sort_type = apply_filters( 'um_member_directory_custom_sorting_type', 'CHAR', $sortby, $directory_data ); + $custom_sort_type = ! empty( $directory_data['sortby_custom_type'] ) ? $directory_data['sortby_custom_type'] : 'CHAR'; + $custom_sort_type = apply_filters( 'um_member_directory_custom_sorting_type', $custom_sort_type, $sortby, $directory_data ); $this->query_args['meta_query'][] = array( 'relation' => 'OR', @@ -1438,7 +1439,9 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { ) ); - $this->query_args['orderby'] = array( $sortby . '_cs' => 'ASC', 'user_login' => 'ASC' ); + $custom_sort_order = ! empty( $directory_data['sortby_custom_order'] ) ? $directory_data['sortby_custom_order'] : 'CHAR'; + + $this->query_args['orderby'] = array( $sortby . '_cs' => $custom_sort_order, 'user_login' => 'ASC' ); } else {