WordPress.org

Make WordPress Core

Ticket #16814: 16814.diff

File 16814.diff, 2.4 KB (added by kovshenin, 4 years ago)
  • src/wp-includes/query.php

     
    22232223                        'parent', 'type', 'ID', 'menu_order', 'comment_count', 'rand',
    22242224                );
    22252225
    2226                 $meta_key = $this->get( 'meta_key' );
    2227                 if ( ! empty( $meta_key ) ) {
    2228                         $allowed_keys[] = $meta_key;
     2226                $meta_key = '';
     2227                $meta_query = false;
     2228                if ( ! empty( $this->meta_query->queries ) ) {
     2229                        $meta_query = reset( $this->meta_query->queries );
     2230
     2231                        if ( ! empty( $meta_query['key'] ) ) {
     2232                                $meta_key = $meta_query['key'];
     2233                                $allowed_keys[] = $meta_query['key'];
     2234                        }
     2235
    22292236                        $allowed_keys[] = 'meta_value';
    22302237                        $allowed_keys[] = 'meta_value_num';
    22312238                }
     
    22522259                                break;
    22532260                        case $meta_key:
    22542261                        case 'meta_value':
    2255                                 $type = $this->get( 'meta_type' );
    2256                                 if ( ! empty( $type ) ) {
    2257                                         $meta_type = $this->meta_query->get_cast_for_type( $type );
     2262                                if ( ! empty( $meta_query['type'] ) ) {
     2263                                        $meta_type = $this->meta_query->get_cast_for_type( $meta_query['type'] );
    22582264                                        $orderby = "CAST($wpdb->postmeta.meta_value AS {$meta_type})";
    22592265                                } else {
    22602266                                        $orderby = "$wpdb->postmeta.meta_value";
  • tests/phpunit/tests/meta.php

     
    162162                $this->assertEquals( $expected2, get_metadata( 'user', $this->author->ID, $key, true ) );
    163163        }
    164164
     165        /**
     166         * @ticket 16814
     167         */
    165168        function test_meta_type_cast() {
    166169                $post_id1 = $this->factory->post->create();
    167170                add_post_meta( $post_id1, 'num_as_longtext', 123 );
     
    181184
    182185                $this->assertEquals( array( $post_id2, $post_id1 ), $posts->posts );
    183186                $this->assertEquals( 2, substr_count( $posts->request, 'CAST(' ) );
     187
     188                // Make sure the newer meta_query syntax behaves in a consistent way
     189                $posts = new WP_Query( array(
     190                        'fields' => 'ids',
     191                        'post_type' => 'any',
     192                        'meta_query' => array(
     193                                array(
     194                                        'key' => 'num_as_longtext',
     195                                        'value' => '0',
     196                                        'compare' => '>',
     197                                        'type' => 'UNSIGNED',
     198                                ),
     199                        ),
     200                        'orderby' => 'meta_value',
     201                        'order' => 'ASC'
     202                ) );
     203
     204                $this->assertEquals( array( $post_id2, $post_id1 ), $posts->posts );
     205                $this->assertEquals( 2, substr_count( $posts->request, 'CAST(' ) );
    184206        }
    185207
    186208        function test_meta_cache_order_asc() {