Make WordPress Core


Ignore:
Timestamp:
02/28/2010 12:49:10 PM (16 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.