WordPress.org

Make WordPress Core


Ignore:
Timestamp:
05/22/2014 06:18:11 PM (5 years ago)
Author:
wonderboymusic
Message:

Apply order to each passed value for orderby in WP_Query:

  • Since orderby in WP_Query can accept space-delimited sets, yet only one order value: when multiple values are passed (and DESC is the order), the default sort order ASC is being applied to all values before the last in the set.
  • There is a unit test that sporadically fails since 3.6 in tests/post/revision due to multiple posts having the same post_date from being added so rapidly
  • When ordering revisions in wp_get_post_revisions(), order by post_date ID
  • Change the order value in wp_get_post_revisions() to ASC. This will produce SQL like: ORDER BY $wpdb->posts.post_date ASC, $wpdb->posts.ID ASC. Previously, this would have produced SQL like: ORDER BY $wpdb->posts.post_date DESC, and with the addition of ID: ORDER BY $wpdb->posts.post_date ASC, $wpdb->posts.ID DESC. Clearly, wrong. The original SQL produced: ORDER BY $wpdb->posts.post_date DESC. As such, return the reversions in reverse order using array_reverse(). Not doing so would break "Preview Changes."
  • Add unit tests to assert that all of this works.
  • All existing unit tests pass with the change to ordering multiple orderbys in WP_Query.
  • In the future, we should support independent order for each orderby, see #17065.

Props SergeyBiryukov, wonderboymusic.
Fixes #26042.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/revision.php

    r28334 r28541  
    418418        return array();
    419419
    420     $defaults = array( 'order' => 'DESC', 'orderby' => 'date', 'check_enabled' => true );
     420    $defaults = array( 'order' => 'ASC', 'orderby' => 'date ID', 'check_enabled' => true );
    421421    $args = wp_parse_args( $args, $defaults );
    422422
     
    428428    if ( ! $revisions = get_children( $args ) )
    429429        return array();
     430
     431    $revisions = array_reverse( $revisions );
    430432
    431433    return $revisions;
Note: See TracChangeset for help on using the changeset viewer.