WordPress.org

Make WordPress Core

Ticket #27887: 27887.patch

File 27887.patch, 2.6 KB (added by tyxla, 5 years ago)

Adding meta_value_num orderby option for WP_User_Query. Including a test for that case. Documenting the new orderby option.

  • src/wp-includes/user.php

     
    521521         *     @type array        $search_columns  Array of column names to be searched. Accepts 'ID', 'login',
    522522         *                                         'nicename', 'email', 'url'. Default empty array.
    523523         *     @type string       $orderby         Field to sort the retrieved users by. Accepts 'ID', 'display_name',
    524          *                                         'login', 'nicename', 'email', 'url', 'registered', 'post_count', or
    525          *                                         'meta_value'. To use 'meta_value', `$meta_key` must be also be defined.
     524         *                                         'login', 'nicename', 'email', 'url', 'registered', 'post_count',
     525         *                                         'meta_value' or 'meta_value_num'. To use 'meta_value' or
     526         *                                         'meta_value_num', `$meta_key` must be also be defined.
    526527         *                                         Default 'user_login'.
    527528         *     @type string       $order           Designates ascending or descending order of users. Accepts 'ASC',
    528529         *                                         'DESC'. Default 'ASC'.
     
    631632                                $orderby = 'ID';
    632633                        } elseif ( 'meta_value' == $qv['orderby'] ) {
    633634                                $orderby = "$wpdb->usermeta.meta_value";
     635                        } elseif ( 'meta_value_num' == $qv['orderby'] ) {
     636                                $orderby = "$wpdb->usermeta.meta_value+0";
    634637                        } elseif ( 'include' === $qv['orderby'] && ! empty( $include ) ) {
    635638                                // Sanitized earlier.
    636639                                $include_sql = implode( ',', $include );
  • tests/phpunit/tests/user/query.php

     
    186186        }
    187187
    188188        /**
     189         * @ticket 27887
     190         */
     191        public function test_orderby_meta_value_num() {
     192                $users = $this->factory->user->create_many( 3, array(
     193                        'role' => 'author'
     194                ) );
     195
     196                update_user_meta( $users[0], 'user_age', '101' );
     197                update_user_meta( $users[1], 'user_age', '20' );
     198                update_user_meta( $users[2], 'user_age', '25' );
     199
     200                $q = new WP_User_Query( array(
     201                        'include' => $users,
     202                        'meta_key' => 'user_age',
     203                        'orderby' => 'meta_value_num',
     204                        'fields' => 'ids'
     205                ) );
     206
     207                $expected = array( $users[1], $users[2], $users[0] );
     208
     209                $this->assertEquals( $expected, $q->get_results() );
     210        }
     211
     212        /**
    189213         * @ticket 21119
    190214         */
    191215        function test_prepare_query() {