mirror of
git://develop.git.wordpress.org/
synced 2025-02-27 10:02:43 +01:00
Add meta_value_num meta_key ordering for WP_Query. Allows Natural numeric ordering of results. Props stencil & scribu for cleanups. Fixes #10649
git-svn-id: https://develop.svn.wordpress.org/trunk@13501 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
e86fe47537
commit
5f43ce3a7b
@ -2056,16 +2056,18 @@ class WP_Query {
|
|||||||
if ( !empty($q['meta_key']) ) {
|
if ( !empty($q['meta_key']) ) {
|
||||||
$allowed_keys[] = $q['meta_key'];
|
$allowed_keys[] = $q['meta_key'];
|
||||||
$allowed_keys[] = 'meta_value';
|
$allowed_keys[] = 'meta_value';
|
||||||
|
$allowed_keys[] = 'meta_value_num';
|
||||||
}
|
}
|
||||||
$q['orderby'] = urldecode($q['orderby']);
|
$q['orderby'] = urldecode($q['orderby']);
|
||||||
$q['orderby'] = addslashes_gpc($q['orderby']);
|
$q['orderby'] = addslashes_gpc($q['orderby']);
|
||||||
$orderby_array = explode(' ',$q['orderby']);
|
$orderby_array = explode(' ', $q['orderby']);
|
||||||
if ( empty($orderby_array) )
|
|
||||||
$orderby_array[] = $q['orderby'];
|
|
||||||
$q['orderby'] = '';
|
$q['orderby'] = '';
|
||||||
for ($i = 0; $i < count($orderby_array); $i++) {
|
|
||||||
|
foreach ( $orderby_array as $i => $orderby ) {
|
||||||
// Only allow certain values for safety
|
// Only allow certain values for safety
|
||||||
$orderby = $orderby_array[$i];
|
if ( ! in_array($orderby, $allowed_keys) )
|
||||||
|
continue;
|
||||||
|
|
||||||
switch ($orderby) {
|
switch ($orderby) {
|
||||||
case 'menu_order':
|
case 'menu_order':
|
||||||
break;
|
break;
|
||||||
@ -2079,15 +2081,19 @@ class WP_Query {
|
|||||||
case 'meta_value':
|
case 'meta_value':
|
||||||
$orderby = "$wpdb->postmeta.meta_value";
|
$orderby = "$wpdb->postmeta.meta_value";
|
||||||
break;
|
break;
|
||||||
|
case 'meta_value_num':
|
||||||
|
$orderby = "$wpdb->postmeta.meta_value+0";
|
||||||
|
break;
|
||||||
case 'comment_count':
|
case 'comment_count':
|
||||||
$orderby = "$wpdb->posts.comment_count";
|
$orderby = "$wpdb->posts.comment_count";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$orderby = "$wpdb->posts.post_" . $orderby;
|
$orderby = "$wpdb->posts.post_" . $orderby;
|
||||||
}
|
}
|
||||||
if ( in_array($orderby_array[$i], $allowed_keys) )
|
|
||||||
$q['orderby'] .= (($i == 0) ? '' : ',') . $orderby;
|
$q['orderby'] .= (($i == 0) ? '' : ',') . $orderby;
|
||||||
}
|
}
|
||||||
|
|
||||||
// append ASC or DESC at the end
|
// append ASC or DESC at the end
|
||||||
if ( !empty($q['orderby']))
|
if ( !empty($q['orderby']))
|
||||||
$q['orderby'] .= " {$q['order']}";
|
$q['orderby'] .= " {$q['order']}";
|
||||||
@ -2644,7 +2650,7 @@ class WP_Query {
|
|||||||
} elseif ( $this->is_tax ) {
|
} elseif ( $this->is_tax ) {
|
||||||
$tax = $this->get('taxonomy');
|
$tax = $this->get('taxonomy');
|
||||||
$slug = $this->get('term');
|
$slug = $this->get('term');
|
||||||
$term = &get_terms($tax, array('slug'=>$slug));
|
$term = &get_terms($tax, array( 'slug' => $slug ) );
|
||||||
if ( is_wp_error($term) || empty($term) )
|
if ( is_wp_error($term) || empty($term) )
|
||||||
return NULL;
|
return NULL;
|
||||||
$term = $term[0];
|
$term = $term[0];
|
||||||
@ -2656,7 +2662,7 @@ class WP_Query {
|
|||||||
} elseif ( $this->is_single ) {
|
} elseif ( $this->is_single ) {
|
||||||
$this->queried_object = $this->post;
|
$this->queried_object = $this->post;
|
||||||
$this->queried_object_id = (int) $this->post->ID;
|
$this->queried_object_id = (int) $this->post->ID;
|
||||||
} elseif ( $this->is_page ) {
|
} elseif ( $this->is_page && !is_null($this->post) ) {
|
||||||
$this->queried_object = $this->post;
|
$this->queried_object = $this->post;
|
||||||
$this->queried_object_id = (int) $this->post->ID;
|
$this->queried_object_id = (int) $this->post->ID;
|
||||||
} elseif ( $this->is_author ) {
|
} elseif ( $this->is_author ) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user