From bd1842e963bb8b738977339bbd94c598255efcbf Mon Sep 17 00:00:00 2001 From: ryan Date: Mon, 19 Jun 2006 17:14:54 +0000 Subject: [PATCH] Cat exclusion from skeltoac. fixes #2825 git-svn-id: http://svn.automattic.com/wordpress/trunk@3886 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/query.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/wp-includes/query.php b/wp-includes/query.php index f5ea2838c3..8b2fa93197 100644 --- a/wp-includes/query.php +++ b/wp-includes/query.php @@ -708,7 +708,7 @@ class WP_Query { $q['cat'] = addslashes_gpc($q['cat']); $join = " LEFT JOIN $wpdb->post2cat ON ($wpdb->posts.ID = $wpdb->post2cat.post_id) "; $cat_array = preg_split('/[,\s]+/', $q['cat']); - $in_cats = $out_cats = ''; + $in_cats = $out_cats = $out_posts = ''; foreach ( $cat_array as $cat ) { $cat = intval($cat); $in = strstr($cat, '-') ? false : true; @@ -722,8 +722,16 @@ class WP_Query { $out_cats = substr($out_cats, 0, -2); if ( strlen($in_cats) > 0 ) $in_cats = " AND category_id IN ($in_cats)"; - if ( strlen($out_cats) > 0 ) - $out_cats = " AND category_id NOT IN ($out_cats)"; + if ( strlen($out_cats) > 0 ) { + $ids = $wpdb->get_col("SELECT post_id FROM $wpdb->post2cat WHERE category_id IN ($out_cats)"); + if ( is_array($ids) && count($ids > 0) ) { + foreach ( $ids as $id ) + $out_posts .= "$id, "; + $out_posts = substr($out_posts, 0, -2); + } + if ( strlen($out_posts) > 0 ) + $out_cats = " AND ID NOT IN ($out_posts)"; + } $whichcat = $in_cats . $out_cats; $distinct = 'DISTINCT'; }