WordPress.org

Make WordPress Core

Changeset 8922


Ignore:
Timestamp:
09/18/08 05:34:37 (6 years ago)
Author:
azaozz
Message:

Allow posts to be ordered by meta_key, props AaronCampbell, fixes#7431

File:
1 edited

Legend:

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

    r8807 r8922  
    20072007            // Used to filter values 
    20082008            $allowed_keys = array('author', 'date', 'category', 'title', 'modified', 'menu_order', 'parent', 'ID', 'rand'); 
     2009            if ( !empty($q['meta_key']) ) { 
     2010                $allowed_keys[] = $q['meta_key']; 
     2011                $allowed_keys[] = 'meta_value'; 
     2012            } 
    20092013            $q['orderby'] = urldecode($q['orderby']); 
    20102014            $q['orderby'] = addslashes_gpc($q['orderby']); 
     
    20252029                        $orderby = 'RAND()'; 
    20262030                        break; 
     2031                    case $q['meta_key']: 
     2032                    case 'meta_value': 
     2033                        $orderby = "$wpdb->postmeta.meta_value"; 
     2034                        break; 
    20272035                    default: 
    20282036                        $orderby = "$wpdb->posts.post_" . $orderby; 
     
    21102118            $join .= " LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) "; 
    21112119        if ( ! empty($q['meta_key']) ) 
    2112             $where .= $wpdb->prepare("AND $wpdb->postmeta.meta_key = %s ", $q['meta_key']); 
    2113         if ( ! empty($q['meta_value']) ) 
    2114             $where .= $wpdb->prepare("AND $wpdb->postmeta.meta_value = %s ", $q['meta_value']); 
     2120            $where .= $wpdb->prepare(" AND $wpdb->postmeta.meta_key = %s ", $q['meta_key']); 
     2121        if ( ! empty($q['meta_value']) ) { 
     2122            if ( ! isset($q['meta_compare']) || empty($q['meta_compare']) || ! in_array($q['meta_compare'], array('=', '!=', '>', '>=', '<', '<=')) ) 
     2123                $q['meta_compare'] = '='; 
     2124 
     2125            $where .= $wpdb->prepare("AND $wpdb->postmeta.meta_value {$q['meta_compare']} %s ", $q['meta_value']); 
     2126        } 
    21152127 
    21162128        // Apply filters on where and join prior to paging so that any 
     
    21832195            $orderby = apply_filters('posts_orderby', $orderby); 
    21842196            $distinct = apply_filters('posts_distinct', $distinct); 
     2197            $limits = apply_filters( 'post_limits', $limits ); 
     2198 
     2199            if ( ! empty($q['meta_key']) ) 
     2200                $fields = "$fields, $wpdb->postmeta.meta_value"; 
     2201 
    21852202            $fields = apply_filters('posts_fields', $fields); 
    2186             $limits = apply_filters( 'post_limits', $limits ); 
    21872203        } 
    21882204 
Note: See TracChangeset for help on using the changeset viewer.