From bfcd9e8fc4912563a7015761adb86ce00f52fefa Mon Sep 17 00:00:00 2001 From: Ryan Boren Date: Fri, 18 Apr 2008 22:29:43 +0000 Subject: [PATCH] Fix meta_key and meta_value queries in get_pages(). Props filosofo. fixes #6773 for trunk git-svn-id: https://develop.svn.wordpress.org/trunk@7746 602fd350-edb4-49c9-b593-d223f7449a82 --- wp-includes/post.php | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/wp-includes/post.php b/wp-includes/post.php index 40b7687721..27d3462581 100644 --- a/wp-includes/post.php +++ b/wp-includes/post.php @@ -1954,11 +1954,21 @@ function &get_pages($args = '') { } } - $query = "SELECT * FROM $wpdb->posts " ; - $query .= ( empty( $meta_key ) ? "" : ", $wpdb->postmeta " ) ; - $query .= " WHERE (post_type = 'page' AND post_status = 'publish') $exclusions $inclusions " ; - // expected_slashed ($meta_key, $meta_value) -- also, it looks funky - $query .= ( empty( $meta_key ) | empty($meta_value) ? "" : $wpdb->prepare(" AND ($wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = %s AND $wpdb->postmeta.meta_value = %s )", $meta_key, $meta_value) ) ; + $join = ''; + $where = "$exclusions $inclusions "; + if ( ! empty( $meta_key ) || ! empty( $meta_value ) ) { + $join = " LEFT JOIN $wpdb->postmeta ON ( $wpdb->posts.ID = $wpdb->postmeta.post_id )"; + + // meta_key and met_value might be slashed + $meta_key = stripslashes($meta_key); + $meta_value = stripslashes($meta_value); + if ( ! empty( $meta_key ) ) + $where .= $wpdb->prepare(" AND $wpdb->postmeta.meta_key = %s", $meta_key); + if ( ! empty( $meta_value ) ) + $where .= $wpdb->prepare(" AND $wpdb->postmeta.meta_value = %s", $meta_value); + + } + $query = "SELECT * FROM $wpdb->posts $join WHERE (post_type = 'page' AND post_status = 'publish') $where "; $query .= $author_query; $query .= " ORDER BY " . $sort_column . " " . $sort_order ;