WordPress.org

Make WordPress Core

Ticket #17065: 24687.diff

File 24687.diff, 1.5 KB (added by andy, 10 months ago)
  • query.php

     
    23712371                        $q['orderby'] = addslashes_gpc($q['orderby']); 
    23722372 
    23732373                        $orderby_array = array(); 
    2374                         foreach ( explode( ' ', $q['orderby'] ) as $i => $orderby ) { 
     2374                        $orderby_parts = preg_split( '/[, ]/', $q['orderby'], -1, PREG_SPLIT_NO_EMPTY ); 
     2375                        foreach ( $orderby_parts as $i => $orderby ) { 
    23752376                                // Only allow certain values for safety 
    23762377                                if ( ! in_array($orderby, $allowed_keys) ) 
    23772378                                        continue; 
    23782379 
     2380                                // If the next word is ASC or DESC, use it 
     2381                                // for this sort key and cancel $q['order'] 
     2382                                $order = ''; 
     2383                                if ( isset( $orderby_parts[ $i + 1 ] ) ) { 
     2384                                        $next_part = strtoupper( $orderby_parts[ $i + 1 ] ); 
     2385                                        if ( in_array( $next_part, array( 'ASC', 'DESC' ) ) ) { 
     2386                                                $q['order'] = ''; 
     2387                                                $order = $next_part; 
     2388                                        } 
     2389                                } 
     2390 
    23792391                                switch ( $orderby ) { 
    23802392                                        case 'menu_order': 
    23812393                                                $orderby = "$wpdb->posts.menu_order"; 
     
    24002412                                                $orderby = "$wpdb->posts.post_" . $orderby; 
    24012413                                } 
    24022414 
    2403                                 $orderby_array[] = $orderby; 
     2415                                $orderby_array[] = trim( "$orderby $order" ); 
    24042416                        } 
    2405                         $orderby = implode( ',', $orderby_array ); 
     2417                        $orderby = implode( ', ', $orderby_array ); 
    24062418 
    24072419                        if ( empty( $orderby ) ) 
    2408                                 $orderby = "$wpdb->posts.post_date ".$q['order']; 
    2409                         else 
    2410                                 $orderby .= " {$q['order']}"; 
     2420                                $orderby = "$wpdb->posts.post_date"; 
     2421 
     2422                        $orderby = trim( "$orderby {$q['order']}" ); 
    24112423                } 
    24122424 
    24132425                if ( is_array( $post_type ) && count( $post_type ) > 1 ) {