Make WordPress Core


Ignore:
Timestamp:
02/28/2010 12:49:10 PM (15 years ago)
Author:
dd32
Message:

Add meta_value_num meta_key ordering for WP_Query. Allows Natural numeric ordering of results. Props stencil & scribu for cleanups. Fixes #10649

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/query.php

    r13495 r13501  
    20572057                $allowed_keys[] = $q['meta_key'];
    20582058                $allowed_keys[] = 'meta_value';
     2059                $allowed_keys[] = 'meta_value_num';
    20592060            }
    20602061            $q['orderby'] = urldecode($q['orderby']);
    20612062            $q['orderby'] = addslashes_gpc($q['orderby']);
    2062             $orderby_array = explode(' ',$q['orderby']);
    2063             if ( empty($orderby_array) )
    2064                 $orderby_array[] = $q['orderby'];
     2063            $orderby_array = explode(' ', $q['orderby']);
    20652064            $q['orderby'] = '';
    2066             for ($i = 0; $i < count($orderby_array); $i++) {
     2065
     2066            foreach ( $orderby_array as $i => $orderby ) {
    20672067                // Only allow certain values for safety
    2068                 $orderby = $orderby_array[$i];
     2068                if ( ! in_array($orderby, $allowed_keys) )
     2069                    continue;
     2070
    20692071                switch ($orderby) {
    20702072                    case 'menu_order':
     
    20802082                        $orderby = "$wpdb->postmeta.meta_value";
    20812083                        break;
     2084                    case 'meta_value_num':
     2085                        $orderby = "$wpdb->postmeta.meta_value+0";
     2086                        break;
    20822087                    case 'comment_count':
    20832088                        $orderby = "$wpdb->posts.comment_count";
     
    20862091                        $orderby = "$wpdb->posts.post_" . $orderby;
    20872092                }
    2088                 if ( in_array($orderby_array[$i], $allowed_keys) )
    2089                     $q['orderby'] .= (($i == 0) ? '' : ',') . $orderby;
    2090             }
     2093
     2094                $q['orderby'] .= (($i == 0) ? '' : ',') . $orderby;
     2095            }
     2096
    20912097            // append ASC or DESC at the end
    20922098            if ( !empty($q['orderby']))
     
    26452651            $tax = $this->get('taxonomy');
    26462652            $slug = $this->get('term');
    2647             $term = &get_terms($tax, array('slug'=>$slug));
     2653            $term = &get_terms($tax, array( 'slug' => $slug ) );
    26482654            if ( is_wp_error($term) || empty($term) )
    26492655                return NULL;
     
    26572663            $this->queried_object = $this->post;
    26582664            $this->queried_object_id = (int) $this->post->ID;
    2659         } elseif ( $this->is_page ) {
     2665        } elseif ( $this->is_page && !is_null($this->post) ) {
    26602666            $this->queried_object = $this->post;
    26612667            $this->queried_object_id = (int) $this->post->ID;
Note: See TracChangeset for help on using the changeset viewer.