Ordering by `RAND()`:

The shortcode callbacks for `gallery` and `playlist` check for `'RAND' == $atts['order']`, which isn't a valid value for `order`. Remove those checks and update the docs.

In `WP_Query`, if the value of `orderby` is `rand`, `order` is irrelevant and should be unset.

Adds unit tests.

Fixes #29629.

Built from https://develop.svn.wordpress.org/trunk@29760


git-svn-id: http://core.svn.wordpress.org/trunk@29532 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Scott Taylor 2014-09-23 03:52:15 +00:00
parent e3eaed1c78
commit ee9d74dc05
2 changed files with 6 additions and 11 deletions

View File

@ -959,9 +959,6 @@ function gallery_shortcode( $attr ) {
), $attr, 'gallery' );
$id = intval( $atts['id'] );
if ( 'RAND' == $atts['order'] ) {
$atts['orderby'] = 'none';
}
if ( ! empty( $atts['include'] ) ) {
$_attachments = get_posts( array( 'include' => $atts['include'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'] ) );
@ -1166,7 +1163,7 @@ add_action( 'wp_playlist_scripts', 'wp_playlist_scripts' );
*
* @type string $type Type of playlist to display. Accepts 'audio' or 'video'. Default 'audio'.
* @type string $order Designates ascending or descending order of items in the playlist.
* Accepts 'ASC', 'DESC', or 'RAND'. Default 'ASC'.
* Accepts 'ASC', 'DESC'. Default 'ASC'.
* @type string $orderby Any column, or columns, to sort the playlist. If $ids are
* passed, this defaults to the order of the $ids array ('post__in').
* Otherwise default is 'menu_order ID'.
@ -1243,9 +1240,6 @@ function wp_playlist_shortcode( $attr ) {
), $attr, 'playlist' );
$id = intval( $atts['id'] );
if ( 'RAND' == $atts['order'] ) {
$atts['orderby'] = 'none';
}
$args = array(
'post_status' => 'inherit',

View File

@ -2795,10 +2795,11 @@ class WP_Query {
$where .= $search . $whichauthor . $whichmimetype;
$rand = ( isset( $q['orderby'] ) && 'rand' === $q['orderby'] );
if ( ! isset( $q['order'] ) ) {
$q['order'] = 'DESC';
$q['order'] = $rand ? '' : 'DESC';
} else {
$q['order'] = $this->parse_order( $q['order'] );
$q['order'] = $rand ? '' : $this->parse_order( $q['order'] );
}
// Order by.
@ -2849,8 +2850,8 @@ class WP_Query {
$orderby = implode( ' ' . $q['order'] . ', ', $orderby_array );
if ( empty( $orderby ) ) {
$orderby = "$wpdb->posts.post_date ".$q['order'];
} else {
$orderby = "$wpdb->posts.post_date " . $q['order'];
} elseif ( ! empty( $q['order'] ) ) {
$orderby .= " {$q['order']}";
}
}