芝麻web文件管理V1.00
编辑当前文件:/www/wwwroot/shphe-en.com/wp-content/plugins/admin-columns-pro/classes/sortable/classes/user.php
default_orderby = ''; // handle sorting request add_action( 'pre_user_query', array( $this, 'handle_sorting_request' ), 1 ); // register sortable headings add_filter( "manage_users_sortable_columns", array( $this, 'add_sortable_headings' ) ); // add reset button add_action( 'restrict_manage_users', array( $this, 'add_reset_button' ) ); } /** * @see CAC_Sortable_Model::get_sortables() * @since 1.0 */ public function get_sortables() { $column_names = array( // WP default columns 'role', 'posts', // Custom Columns 'column-first_name', 'column-display_name', 'column-last_name', 'column-meta', 'column-nickname', 'column-user_commentcount', 'column-user_description', 'column-user_id', 'column-user_postcount', 'column-user_registered', 'column-user_url', // ACF Fields 'column-acf_field', // WooCommerce 'column-wc-user-orders', 'column-wc-user-order_count' //'column-wc-user-total-sales' // WC Subscriptions extension //'column-wc-user-subscription-expiration-date', //'column-wc-user-subscription-trial-expiration-date', //'column-wc-user-subscription-status', //'column-wc-user-subscription-next-payment-date', //'column-wc-user-subscription-last-payment-date', //'column-wc-user-subscription-end-date' ); return $column_names; } /** * Get Users * * Do not use get_users() method. * * @since 1.0 */ private function get_user_ids() { global $wpdb; return $wpdb->get_col( "SELECT ID FROM $wpdb->users" ); } /** * Admin requests for orderby column * * Only works for WP_Query objects ( such as posts and media ) * * @since 1.0 * * @param array $vars * @return array Vars */ public function handle_sorting_request( $user_query ) { global $wpdb; $vars = $user_query->query_vars; // prevent looping because this filter is trigered by get_users(); /*if ( 'ID' === $vars['fields'] ) { return; }*/ // sorting event? if ( empty( $vars['orderby'] ) ) { return; } $vars = $this->apply_sorting_preference( $vars ); $column = $this->get_column_by_orderby( $vars['orderby'] ); if ( empty( $column ) ) { return; } // unsorted Users $_users = array(); switch ( $column->properties->type ) : // WP Default Columns case 'role' : $sort_flag = SORT_REGULAR; foreach ( $this->get_user_ids() as $id ) { $u = get_userdata( $id ); $role = ! empty( $u->roles[0] ) ? $u->roles[0] : ''; if ( $role ) { $_users[ $id ] = $this->prepare_sort_string_value( $role ); } } break; case 'posts' : $sort_flag = SORT_NUMERIC; foreach ( $this->get_user_ids() as $id ) { $_users[ $id ] = $column->get_user_postcount( $id, 'post' ); } break; // Custom Columns case 'column-user_id' : $user_query->query_orderby = "ORDER BY ID {$vars['order']}"; $vars['orderby'] = 'ID'; break; case 'column-user_registered' : $user_query->query_orderby = "ORDER BY user_registered {$vars['order']}"; $vars['orderby'] = 'registered'; break; case 'column-nickname' : $sort_flag = SORT_REGULAR; break; case 'column-first_name' : $sort_flag = SORT_REGULAR; break; case 'column-display_name' : $sort_flag = SORT_REGULAR; break; case 'column-last_name' : $sort_flag = SORT_REGULAR; break; case 'column-user_url' : $sort_flag = SORT_REGULAR; break; case 'column-user_description' : $sort_flag = SORT_REGULAR; break; case 'column-user_commentcount' : // @todo: maybe use WP_Comment_Query to generate this subquery? penalty is extra query and bloat, advantage is WP_Comment_Query filters used $sub_query = " LEFT JOIN ( SELECT user_id, COUNT(user_id) AS comment_count FROM {$wpdb->comments} WHERE user_id <> 0 GROUP BY user_id ) AS comments ON {$wpdb->users}.ID = comments.user_id "; $user_query->query_from .= $sub_query; $user_query->query_orderby = "ORDER BY comment_count " . $vars['order']; if ( ! $this->show_all_results ) { $user_query->query_where .= " AND comment_count IS NOT NULL"; } break; case 'column-user_postcount' : $sort_flag = SORT_NUMERIC; foreach ( $this->get_user_ids() as $id ) { $_users[ $id ] = $column->get_count( $id ); } break; case 'column-meta' : $sort_flag = SORT_REGULAR; if ( 'numeric' == $column->options->field_type ) { $sort_flag = SORT_NUMERIC; } if ( 'checkmark' == $column->options->field_type ) { foreach ( $this->get_user_ids() as $id ) { $value = $column->get_value( $id ); $_users[ $id ] = $this->prepare_sort_string_value( $value ? '1' : '0' ); } } if ( in_array( $column->options->field_type, array( 'image', 'library_id' ) ) ) { $sort_flag = SORT_NUMERIC; foreach ( $this->get_user_ids() as $id ) { $thumbs = $column->get_thumbnails( $column->get_meta_by_id( $id ) ); $_users[ $id ] = $thumbs ? count( $thumbs ) : 0; } } break; case 'column-acf_field' : if ( method_exists( $column, 'get_field' ) ) { $field = $column->get_field(); $sort_flag = in_array( $field['type'], array( 'date_picker', 'number' ) ) ? SORT_NUMERIC : SORT_REGULAR; foreach ( $this->get_user_ids() as $id ) { $value = $column->get_sorting_value( $id ); if ( $value || $this->show_all_results ) { $_users[ $id ] = $this->prepare_sort_string_value( $value ); } } } break; // WooCommerce case 'column-wc-user-orders': $sort_flag = SORT_NUMERIC; foreach ( $this->get_user_ids() as $id ) { $value = $column->get_raw_value( $id ); if ( $value || $this->show_all_results ) { $_users[ $id ] = count( $value ); } } break; case 'column-wc-user-order_count': $sort_flag = SORT_NUMERIC; break; case 'column-wc-user-total-sales': $sort_flag = SORT_NUMERIC; foreach ( $this->get_user_ids() as $id ) { $value = $column->get_sorting_value( $id ); if ( $value || $this->show_all_results ) { $_users[ $id ] = $value; } } break; // Try to sort by raw value. default : $sort_flag = SORT_REGULAR; foreach ( $this->get_user_ids() as $id ) { $_users[ $id ] = $column->get_raw_value( $id ); } endswitch; if ( isset( $sort_flag ) ) { // set sorting value if ( empty( $_users ) ) { foreach ( $this->get_user_ids() as $id ) { $value = $column->get_raw_value( $id ); if ( $value || $this->show_all_results ) { $_users[ $id ] = $this->prepare_sort_string_value( $value ); } } } // sorting if ( 'ASC' == $vars['order'] ) { asort( $_users, $sort_flag ); } else { arsort( $_users, $sort_flag ); } // alter orderby SQL if ( ! empty( $_users ) ) { global $wpdb; // for MU site compatibility $prefix = $wpdb->base_prefix; $column_names = implode( ',', array_keys( $_users ) ); $user_query->query_where .= " AND {$prefix}users.ID IN ({$column_names})"; $user_query->query_orderby = "ORDER BY FIELD({$prefix}users.ID,{$column_names})"; } // cleanup the vars we dont need $vars['order'] = ''; $vars['orderby'] = ''; } $user_query->query_vars = array_merge( $user_query->query_vars, $vars ); } }