Обновляем ID терминов после разделения и делаем чтобы term_taxonomy_id = term_id.
Исправляем структуру Базы данных таксономий. В этой заметке будет код, которые поправляет (исправляет, упрощает, обновляет) значения в таблицах wp_term_taxonomy и term_relationships в соответствии с новой логикой WordPress.
С версии 4.2 значение этой колонки term_taxonomy_id может равняться значению колонки term_id. Это нужно для потенциального отказа от таблицы term_taxonomy. Подробнее я писал про это здесь.
Ниже вы найдете код который обновляет ID терминов (элементов таксономии) в базе данных (БД), так чтобы после разделения терминов у каждого термина был свой уникальный ID.
Код ниже изменяет/испрвляет значения колонки term_taxonomy_id у таблиц term_taxonomy и term_relationships, при этом не ломая ничего в структуре сайта.
/**
* Makes equal DB fields `wp_terms` and `wp_term_taxonomy` - `term_taxonomy_id = term_id`
*
* Since WP 4.2 it is more correct and better.
*
* @version 1.1
*/
function term_id_to_term_taxonomy_id(){
global $wpdb;
$res = [];
// let's find AUTO_INCREMENT
$new_AI = 10 + max(
$wpdb->get_var( "SELECT MAX(term_id) FROM $wpdb->terms" ),
$wpdb->get_var( "SELECT MAX(term_taxonomy_id) FROM $wpdb->term_taxonomy" )
);
// set new AUTO_INCREMENT
$res['t_AI'] = $wpdb->query( "ALTER TABLE $wpdb->terms AUTO_INCREMENT = $new_AI" );
$res['tt_AI'] = $wpdb->query( "ALTER TABLE $wpdb->term_taxonomy AUTO_INCREMENT = $new_AI" );
// increase the values so that we can safely change them later -
// to make sure that no one term_id is equal to tt_id (term_id != tt_id).
$res['tt val up'] = $wpdb->query( "UPDATE $wpdb->term_taxonomy SET term_taxonomy_id = term_taxonomy_id + $new_AI" );
$res['tr val up'] = $wpdb->query( "UPDATE $wpdb->term_relationships SET term_taxonomy_id = term_taxonomy_id + $new_AI" );
// change all ID
$data = $wpdb->get_results( "SELECT * FROM $wpdb->term_taxonomy WHERE term_id != term_taxonomy_id" );
foreach( $data as $dat ){
$from = $dat->term_taxonomy_id;
$to = $dat->term_id;
$SET = "SET term_taxonomy_id = $to WHERE term_taxonomy_id = $from";
$done = 0;
if( $wpdb->query( "UPDATE $wpdb->term_taxonomy $SET" ) ){
$done = $wpdb->query( "UPDATE $wpdb->term_relationships $SET" );
}
if( $done ){
$res['UP']['DONE'][] = "$from > $to";
}
else{
$res['UP']['NO'][] = "$from > $to";
}
}
return $res;
}
// run the function
print_r( term_id_to_term_taxonomy_id() );