upgrade_230

Definition:
function upgrade_230() {}

Execute changes made in WordPress 2.3.

Source code

function upgrade_230() {

	global $wp_current_db_version, $wpdb;



	if ( $wp_current_db_version < 5200 ) {

		populate_roles_230();

	}



	// Convert categories to terms.

	$tt_ids = array();

	$have_tags = false;

	$categories = $wpdb->get_results("SELECT * FROM $wpdb->categories ORDER BY cat_ID");

	foreach ($categories as $category) {

		$term_id = (int) $category->cat_ID;

		$name = $category->cat_name;

		$description = $category->category_description;

		$slug = $category->category_nicename;

		$parent = $category->category_parent;

		$term_group = 0;



		// Associate terms with the same slug in a term group and make slugs unique.

		if ( $exists = $wpdb->get_results( $wpdb->prepare("SELECT term_id, term_group FROM $wpdb->terms WHERE slug = %s", $slug) ) ) {

			$term_group = $exists[0]->term_group;

			$id = $exists[0]->term_id;

			$num = 2;

			do {

				$alt_slug = $slug . "-$num";

				$num++;

				$slug_check = $wpdb->get_var( $wpdb->prepare("SELECT slug FROM $wpdb->terms WHERE slug = %s", $alt_slug) );

			} while ( $slug_check );



			$slug = $alt_slug;



			if ( empty( $term_group ) ) {

				$term_group = $wpdb->get_var("SELECT MAX(term_group) FROM $wpdb->terms GROUP BY term_group") + 1;

				$wpdb->query( $wpdb->prepare("UPDATE $wpdb->terms SET term_group = %d WHERE term_id = %d", $term_group, $id) );

			}

		}



		$wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->terms (term_id, name, slug, term_group) VALUES

		(%d, %s, %s, %d)", $term_id, $name, $slug, $term_group) );



		$count = 0;

		if ( !empty($category->category_count) ) {

			$count = (int) $category->category_count;

			$taxonomy = 'category';

			$wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ( %d, %s, %s, %d, %d)", $term_id, $taxonomy, $description, $parent, $count) );

			$tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id;

		}



		if ( !empty($category->link_count) ) {

			$count = (int) $category->link_count;

			$taxonomy = 'link_category';

			$wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ( %d, %s, %s, %d, %d)", $term_id, $taxonomy, $description, $parent, $count) );

			$tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id;

		}



		if ( !empty($category->tag_count) ) {

			$have_tags = true;

			$count = (int) $category->tag_count;

			$taxonomy = 'post_tag';

			$wpdb->insert( $wpdb->term_taxonomy, compact('term_id', 'taxonomy', 'description', 'parent', 'count') );

			$tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id;

		}



		if ( empty($count) ) {

			$count = 0;

			$taxonomy = 'category';

			$wpdb->insert( $wpdb->term_taxonomy, compact('term_id', 'taxonomy', 'description', 'parent', 'count') );

			$tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id;

		}

	}



	$select = 'post_id, category_id';

	if ( $have_tags )

		$select .= ', rel_type';



	$posts = $wpdb->get_results("SELECT $select FROM $wpdb->post2cat GROUP BY post_id, category_id");

	foreach ( $posts as $post ) {

		$post_id = (int) $post->post_id;

		$term_id = (int) $post->category_id;

		$taxonomy = 'category';

		if ( !empty($post->rel_type) && 'tag' == $post->rel_type)

			$taxonomy = 'tag';

		$tt_id = $tt_ids[$term_id][$taxonomy];

		if ( empty($tt_id) )

			continue;



		$wpdb->insert( $wpdb->term_relationships, array('object_id' => $post_id, 'term_taxonomy_id' => $tt_id) );

	}



	// < 3570 we used linkcategories.  >= 3570 we used categories and link2cat.

	if ( $wp_current_db_version < 3570 ) {

		// Create link_category terms for link categories.  Create a map of link cat IDs

		// to link_category terms.

		$link_cat_id_map = array();

		$default_link_cat = 0;

		$tt_ids = array();

		$link_cats = $wpdb->get_results("SELECT cat_id, cat_name FROM " . $wpdb->prefix . 'linkcategories');

		foreach ( $link_cats as $category) {

			$cat_id = (int) $category->cat_id;

			$term_id = 0;

			$name = $wpdb->escape($category->cat_name);

			$slug = sanitize_title($name);

			$term_group = 0;



			// Associate terms with the same slug in a term group and make slugs unique.

			if ( $exists = $wpdb->get_results( $wpdb->prepare("SELECT term_id, term_group FROM $wpdb->terms WHERE slug = %s", $slug) ) ) {

				$term_group = $exists[0]->term_group;

				$term_id = $exists[0]->term_id;

			}



			if ( empty($term_id) ) {

				$wpdb->insert( $wpdb->terms, compact('name', 'slug', 'term_group') );

				$term_id = (int) $wpdb->insert_id;

			}



			$link_cat_id_map[$cat_id] = $term_id;

			$default_link_cat = $term_id;



			$wpdb->insert( $wpdb->term_taxonomy, array('term_id' => $term_id, 'taxonomy' => 'link_category', 'description' => '', 'parent' => 0, 'count' => 0) );

			$tt_ids[$term_id] = (int) $wpdb->insert_id;

		}



		// Associate links to cats.

		$links = $wpdb->get_results("SELECT link_id, link_category FROM $wpdb->links");

		if ( !empty($links) ) foreach ( $links as $link ) {

			if ( 0 == $link->link_category )

				continue;

			if ( ! isset($link_cat_id_map[$link->link_category]) )

				continue;

			$term_id = $link_cat_id_map[$link->link_category];

			$tt_id = $tt_ids[$term_id];

			if ( empty($tt_id) )

				continue;



			$wpdb->insert( $wpdb->term_relationships, array('object_id' => $link->link_id, 'term_taxonomy_id' => $tt_id) );

		}



		// Set default to the last category we grabbed during the upgrade loop.

		update_option('default_link_category', $default_link_cat);

	} else {

		$links = $wpdb->get_results("SELECT link_id, category_id FROM $wpdb->link2cat GROUP BY link_id, category_id");

		foreach ( $links as $link ) {

			$link_id = (int) $link->link_id;

			$term_id = (int) $link->category_id;

			$taxonomy = 'link_category';

			$tt_id = $tt_ids[$term_id][$taxonomy];

			if ( empty($tt_id) )

				continue;

			$wpdb->insert( $wpdb->term_relationships, array('object_id' => $link_id, 'term_taxonomy_id' => $tt_id) );

		}

	}



	if ( $wp_current_db_version < 4772 ) {

		// Obsolete linkcategories table

		$wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'linkcategories');

	}



	// Recalculate all counts

	$terms = $wpdb->get_results("SELECT term_taxonomy_id, taxonomy FROM $wpdb->term_taxonomy");

	foreach ( (array) $terms as $term ) {

		if ( ('post_tag' == $term->taxonomy) || ('category' == $term->taxonomy) )

			$count = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->term_relationships, $wpdb->posts WHERE $wpdb->posts.ID = $wpdb->term_relationships.object_id AND post_status = 'publish' AND post_type = 'post' AND term_taxonomy_id = %d", $term->term_taxonomy_id) );

		else

			$count = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->term_relationships WHERE term_taxonomy_id = %d", $term->term_taxonomy_id) );

		$wpdb->update( $wpdb->term_taxonomy, array('count' => $count), array('term_taxonomy_id' => $term->term_taxonomy_id) );

	}

}

3231

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: