in AKS-Demos/WordPress-Demo/Code/public/wp-admin/includes/upgrade.php [1270:1486]
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.
$exists = $wpdb->get_results( $wpdb->prepare( "SELECT term_id, term_group FROM $wpdb->terms WHERE slug = %s", $slug ) );
if ( $exists ) {
$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
* category 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 = wp_slash( $category->cat_name );
$slug = sanitize_title( $name );
$term_group = 0;
// Associate terms with the same slug in a term group and make slugs unique.
$exists = $wpdb->get_results( $wpdb->prepare( "SELECT term_id, term_group FROM $wpdb->terms WHERE slug = %s", $slug ) );
if ( $exists ) {
$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 categories.
$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 ) );
}
}