WordPress.org

Make WordPress Core

Ticket #16814: 16814.diff

File 16814.diff, 2.4 KB (added by kovshenin, 3 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() {