| 2297 | | if ( empty($q['orderby']) ) { |
| 2298 | | $orderby = "$wpdb->posts.post_date " . $q['order']; |
| 2299 | | } elseif ( 'none' == $q['orderby'] ) { |
| | 2297 | if ( empty($q['orderby']) ) |
| | 2298 | $q_orderby = array(); |
| | 2299 | elseif ( is_array( $q['orderby'] ) ) |
| | 2300 | $q_orderby = $q['orderby']; |
| | 2301 | else |
| | 2302 | $q_orderby = explode(' ', $q['orderby']); |
| | 2303 | |
| | 2304 | // Used to filter values |
| | 2305 | $allowed_keys = array('author', 'date', 'title', 'modified', 'menu_order', 'parent', 'ID', 'rand', 'comment_count'); |
| | 2306 | $orderby_array = array(); |
| | 2307 | |
| | 2308 | foreach ( $q_orderby as $_order ) { |
| | 2309 | if ( empty($_order) ) |
| | 2310 | continue; |
| 2301 | | } else { |
| 2302 | | // Used to filter values |
| 2303 | | $allowed_keys = array('author', 'date', 'title', 'modified', 'menu_order', 'parent', 'ID', 'rand', 'comment_count'); |
| 2304 | | if ( !empty($q['meta_key']) ) { |
| 2305 | | $allowed_keys[] = $q['meta_key']; |
| 2306 | | $allowed_keys[] = 'meta_value'; |
| 2307 | | $allowed_keys[] = 'meta_value_num'; |
| 2308 | | } |
| 2309 | | $q['orderby'] = urldecode($q['orderby']); |
| 2310 | | $q['orderby'] = addslashes_gpc($q['orderby']); |
| | 2312 | $order = ''; |
| | 2313 | $field = ''; |
| | 2314 | $meta_key = ''; |
| | 2315 | $value = null; |
| 2312 | | $orderby_array = array(); |
| 2313 | | foreach ( explode( ' ', $q['orderby'] ) as $i => $orderby ) { |
| 2314 | | // Only allow certain values for safety |
| 2315 | | if ( ! in_array($orderby, $allowed_keys) ) |
| | 2317 | if ( ! is_array( $_order ) ) |
| | 2318 | $field = urldecode($_order); |
| | 2319 | else |
| | 2320 | extract($_order, EXTR_OVERWRITE); |
| | 2321 | |
| | 2322 | // Skip over empty data sets. |
| | 2323 | if ( empty( $field ) ) { |
| | 2324 | if ( '' === $meta_key ) |
| | 2355 | // Fieldnames *may* be a queried meta_key |
| | 2356 | if ( '' === $meta_key && $field == $mq['key'] ) |
| | 2357 | $meta_key = $field; |
| | 2358 | |
| | 2359 | if ( $meta_key == $mq['key'] ) { |
| | 2360 | $alias = $i ? 'mt' . $i : $wpdb->postmeta; // See wp-includes/meta.php _get_meta_sql() for alias names |
| | 2361 | if ( 'meta_value' == $field ) |
| | 2362 | $orderby = "$alias.meta_value"; |
| | 2363 | elseif ( 'meta_value_num' == $field ) |
| | 2364 | $orderby = "$alias.meta_value+0"; |
| | 2365 | break; // out of the foreach |
| | 2366 | } |
| | 2367 | $i++; |
| | 2368 | } |
| | 2369 | } |
| | 2370 | if ( !empty($orderby) ) { |
| | 2371 | if ( null !== $value ) |
| | 2372 | $orderby = $wpdb->prepare("($orderby = %s)", $value); |
| | 2373 | $orderby .= ' ' . $order; |