Make WordPress Core

Ticket #35692: 35692.diff

File 35692.diff, 2.7 KB (added by hlashbrooke, 9 years ago)

Adding new seed argument to WP_Query args

  • query.php

     
    14571457                        , 'fields'
    14581458                        , 'menu_order'
    14591459                        , 'embed'
     1460                        , 'seed'
    14601461                );
    14611462
    14621463                foreach ( $keys as $key ) {
     
    15681569         *                                                 return posts containing 'pillow' but not 'sofa'.
    15691570         *     @type int          $second                  Second of the minute. Default empty. Accepts numbers 0-60.
    15701571         *     @type bool         $sentence                Whether to search by phrase. Default false.
     1572         *     @type int                  $seed                                    A seed value to pass to MySQL's `RAND()` function
    15711573         *     @type bool         $suppress_filters        Whether to suppress filters. Default false.
    15721574         *     @type string       $tag                     Tag slug. Comma-separated (either), Plus-separated (all).
    15731575         *     @type array        $tag__and                An array of tag ids (AND in).
     
    16141616                $qv['pagename'] = trim( $qv['pagename'] );
    16151617                $qv['name'] = trim( $qv['name'] );
    16161618                $qv['title'] = trim( $qv['title'] );
     1619                $qv['seed'] =  absint( $qv['seed'] );
    16171620                if ( '' !== $qv['hour'] ) $qv['hour'] = absint($qv['hour']);
    16181621                if ( '' !== $qv['minute'] ) $qv['minute'] = absint($qv['minute']);
    16191622                if ( '' !== $qv['second'] ) $qv['second'] = absint($qv['second']);
     
    23242327         * @param string $orderby Alias for the field to order by.
    23252328         * @return string|false Table-prefixed value to used in the ORDER clause. False otherwise.
    23262329         */
    2327         protected function parse_orderby( $orderby ) {
     2330        protected function parse_orderby( $orderby, $seed ) {
    23282331                global $wpdb;
    23292332
    23302333                // Used to filter values.
     
    23682371                                $orderby_clause = "$wpdb->posts.{$orderby}";
    23692372                                break;
    23702373                        case 'rand':
    2371                                 $orderby_clause = 'RAND()';
     2374                                $seed_value = '';
     2375                                if( $seed ) {
     2376                                        $seed_value = $seed;
     2377                                }
     2378                                $orderby_clause = 'RAND(' . esc_sql( $seed_value ) . ')';
    23722379                                break;
    23732380                        case $primary_meta_key:
    23742381                        case 'meta_value':
     
    29702977                        if ( is_array( $q['orderby'] ) ) {
    29712978                                foreach ( $q['orderby'] as $_orderby => $order ) {
    29722979                                        $orderby = addslashes_gpc( urldecode( $_orderby ) );
    2973                                         $parsed  = $this->parse_orderby( $orderby );
     2980                                        $parsed  = $this->parse_orderby( $orderby, $q['seed'] );
    29742981
    29752982                                        if ( ! $parsed ) {
    29762983                                                continue;
     
    29852992                                $q['orderby'] = addslashes_gpc( $q['orderby'] );
    29862993
    29872994                                foreach ( explode( ' ', $q['orderby'] ) as $i => $orderby ) {
    2988                                         $parsed = $this->parse_orderby( $orderby );
     2995                                        $parsed = $this->parse_orderby( $orderby, $q['seed'] );
    29892996                                        // Only allow certain values for safety.
    29902997                                        if ( ! $parsed ) {
    29912998                                                continue;