Make WordPress Core

Opened 18 years ago

Closed 17 years ago

Last modified 4 months ago

#3460 closed defect (bug) (wontfix)

Duplicated default category after deleting a category

Reported by: zhouqb's profile zhouqb Owned by: markjaquith's profile markjaquith
Milestone: Priority: normal
Severity: normal Version: 2.0.5
Component: Administration Keywords: category
Focuses: Cc:

Description

If a category is deleted, all the posts under it will be assigned the default category.

A better approach is checking if it has been assigned another category. If yes, don't apply the default category - that's meaningless.

A real bug is, if the post was assigned both the deleted category and the default, the default will be assigned once more, resulting in two identical rows (except rel_id column) in the wp_post2cat table. Also the fix is adding a check, but following the approach above will avoid such situation.

Attachments (1)

add_to_default_cat_posts_that_only_exist_in_deleted_cat.diff (2.0 KB) - added by markjaquith 17 years ago.
Patch for 2.0.x

Download all attachments as: .zip

Change History (7)

#1 @markjaquith
18 years ago

  • Milestone changed from 2.1 to 2.0.7
  • Owner changed from anonymous to markjaquith
  • Status changed from new to assigned

This has been fixed for 2.1

Possible 2.0.7 milestone.

Here is the 2.1 code, for reference:

	// Only set posts and links to the default category if they're not in another category already.
	$default_cat = get_option('default_category');
	$posts = $wpdb->get_col("SELECT post_id FROM $wpdb->post2cat WHERE category_id='$cat_ID'");
	if ( is_array($posts) ) foreach ($posts as $post_id) {
		$cats = wp_get_post_categories($post_id);
		if ( 1 == count($cats) )
			$cats = array($default_cat);
		else
			$cats = array_diff($cats, array($cat_ID));
		wp_set_post_categories($post_id, $cats);
	}

#2 @markjaquith
17 years ago

  • Milestone changed from 2.0.7 to 2.0.8

#3 @markjaquith
17 years ago

The functions used to do it in 2.1 (wp_get_post_categories() and wp_set_post_categories() don't exist in 2.0.x

I've attached a patch that should do the equivalent in 2.0.x, but I'd like to save it for another milestone. It's not quite ideal, because it causes one query per post that existed in the category you're deleting.

#4 @foolswisdom
17 years ago

  • Milestone changed from 2.0.10 to 2.0.11

#5 @foolswisdom
17 years ago

  • Milestone changed from 2.0.11 to 2.0.eventually

#6 @Nazgul
17 years ago

  • Milestone 2.0.eventually deleted
  • Resolution set to wontfix
  • Status changed from assigned to closed

Closing as wontfix for the 2.0 branch.

MarkJaquith has stated that only security fixes can go into the 2.0 branch.

Note: See TracTickets for help on using tickets.