Ticket #35692: 35692.1.diff
| File 35692.1.diff, 2.8 KB (added by , 10 years ago) |
|---|
-
query.php
1457 1457 , 'fields' 1458 1458 , 'menu_order' 1459 1459 , 'embed' 1460 , 'seed' 1460 1461 ); 1461 1462 1462 1463 foreach ( $keys as $key ) { … … 1568 1569 * return posts containing 'pillow' but not 'sofa'. 1569 1570 * @type int $second Second of the minute. Default empty. Accepts numbers 0-60. 1570 1571 * @type bool $sentence Whether to search by phrase. Default false. 1572 * @type int $seed A seed value to pass to MySQL's `RAND()` function 1571 1573 * @type bool $suppress_filters Whether to suppress filters. Default false. 1572 1574 * @type string $tag Tag slug. Comma-separated (either), Plus-separated (all). 1573 1575 * @type array $tag__and An array of tag ids (AND in). … … 1614 1616 $qv['pagename'] = trim( $qv['pagename'] ); 1615 1617 $qv['name'] = trim( $qv['name'] ); 1616 1618 $qv['title'] = trim( $qv['title'] ); 1619 $qv['seed'] = absint( $qv['seed'] ); 1617 1620 if ( '' !== $qv['hour'] ) $qv['hour'] = absint($qv['hour']); 1618 1621 if ( '' !== $qv['minute'] ) $qv['minute'] = absint($qv['minute']); 1619 1622 if ( '' !== $qv['second'] ) $qv['second'] = absint($qv['second']); … … 2321 2324 * 2322 2325 * @global wpdb $wpdb WordPress database abstraction object. 2323 2326 * 2324 * @param string $orderby Alias for the field to order by. 2327 * @param string $orderby Alias for the field to order by. 2328 * @param integer $seed Seed value for random ordering 2325 2329 * @return string|false Table-prefixed value to used in the ORDER clause. False otherwise. 2326 2330 */ 2327 protected function parse_orderby( $orderby ) {2331 protected function parse_orderby( $orderby, $seed ) { 2328 2332 global $wpdb; 2329 2333 2330 2334 // Used to filter values. … … 2368 2372 $orderby_clause = "$wpdb->posts.{$orderby}"; 2369 2373 break; 2370 2374 case 'rand': 2371 $orderby_clause = 'RAND()'; 2375 $seed_value = ''; 2376 if( $seed ) { 2377 $seed_value = $seed; 2378 } 2379 $orderby_clause = 'RAND(' . esc_sql( $seed_value ) . ')'; 2372 2380 break; 2373 2381 case $primary_meta_key: 2374 2382 case 'meta_value': … … 2970 2978 if ( is_array( $q['orderby'] ) ) { 2971 2979 foreach ( $q['orderby'] as $_orderby => $order ) { 2972 2980 $orderby = addslashes_gpc( urldecode( $_orderby ) ); 2973 $parsed = $this->parse_orderby( $orderby );2981 $parsed = $this->parse_orderby( $orderby, $q['seed'] ); 2974 2982 2975 2983 if ( ! $parsed ) { 2976 2984 continue; … … 2985 2993 $q['orderby'] = addslashes_gpc( $q['orderby'] ); 2986 2994 2987 2995 foreach ( explode( ' ', $q['orderby'] ) as $i => $orderby ) { 2988 $parsed = $this->parse_orderby( $orderby );2996 $parsed = $this->parse_orderby( $orderby, $q['seed'] ); 2989 2997 // Only allow certain values for safety. 2990 2998 if ( ! $parsed ) { 2991 2999 continue;