WordPress.org

Make WordPress Core

Ticket #24687: 24687.diff

File 24687.diff, 1.5 KB (added by andy, 6 years 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 ) {