WordPress.org

Make WordPress Core

Ticket #24093: 24093.4.patch

File 24093.4.patch, 2.5 KB (added by vprat, 7 years ago)

Patch for the latest WordPress 4.0 version

  • meta.php

     
    10361036                                $meta_compare = '=';
    10371037
    10381038                        $i = count( $join );
    1039                         $alias = $i ? 'mt' . $i : $meta_table;
     1039                        $alias = $i ? 'mt' . $i : 'mt0';
    10401040
    10411041                        if ( 'NOT EXISTS' == $meta_compare ) {
    10421042                                $join[$i]  = "LEFT JOIN $meta_table";
    1043                                 $join[$i] .= $i ? " AS $alias" : '';
     1043                                $join[$i] .= " AS $alias";
    10441044                                $join[$i] .= " ON ($primary_table.$primary_id_column = $alias.$meta_id_column AND $alias.meta_key = '$meta_key')";
    10451045
    10461046                                $where[$k] = ' ' . $alias . '.' . $meta_id_column . ' IS NULL';
     
    10481048                                continue;
    10491049                        }
    10501050
    1051                         $join[$i]  = "INNER JOIN $meta_table";
    1052                         $join[$i] .= $i ? " AS $alias" : '';
    1053                         $join[$i] .= " ON ($primary_table.$primary_id_column = $alias.$meta_id_column)";
    1054 
     1051                        if ( !$i ) {
     1052                                $join[$i]  = "INNER JOIN $meta_table";
     1053                                $join[$i] .= $i ? " AS $alias" : ' AS mt0';
     1054                                $join[$i] .= " ON ($primary_table.$primary_id_column = $alias.$meta_id_column)";
     1055                        }
     1056                       
    10551057                        $where[$k] = '';
    10561058                        if ( !empty( $meta_key ) )
    10571059                                $where[$k] = $wpdb->prepare( "$alias.meta_key = %s", $meta_key );
     
    10891091                        if ( ! empty( $where[$k] ) )
    10901092                                $where[$k] .= ' AND ';
    10911093
    1092                         $where[$k] = ' (' . $where[$k] . $wpdb->prepare( "CAST($alias.meta_value AS {$meta_type}) {$meta_compare} {$meta_compare_string})", $meta_value );
     1094                        $where[$k] = ' ' . $primary_table . '.' . $primary_id_column . ' IN (' 
     1095                                        . ' SELECT ' . $meta_id_column 
     1096                                        . ' FROM ' . $meta_table . ' AS ' . $alias 
     1097                                        . ' WHERE ' . $where[$k] . $wpdb->prepare( "CAST($alias.meta_value AS {$meta_type}) {$meta_compare} {$meta_compare_string}", $meta_value )
     1098                                        . ')'; 
    10931099                }
    10941100
    10951101                $where = array_filter( $where );
  • query.php

     
    22552255                                $type = $this->get( 'meta_type' );
    22562256                                if ( ! empty( $type ) ) {
    22572257                                        $meta_type = $this->meta_query->get_cast_for_type( $type );
    2258                                         $orderby = "CAST($wpdb->postmeta.meta_value AS {$meta_type})";
     2258                                        $orderby = "CAST(mt0.meta_value AS {$meta_type})";
    22592259                                } else {
    2260                                         $orderby = "$wpdb->postmeta.meta_value";
     2260                                        $orderby = "mt0.meta_value";
    22612261                                }
    22622262                                break;
    22632263                        case 'meta_value_num':
    2264                                 $orderby = "$wpdb->postmeta.meta_value+0";
     2264                                $orderby = "mt0.meta_value+0";
    22652265                                break;
    22662266                        default:
    22672267                                $orderby = "$wpdb->posts.post_" . $orderby;