WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Получай пассивный доход от сайта

Актуализируем структуру Базы данных таксономий: term_taxonomy_id = term_id

Обновление данных в таблицах wp_term_taxonomy и term_relationships.

Код ниже изменяет значения колонки term_taxonomy_id у таблиц term_taxonomy и term_relationships. С версии 4.2 значение этой колонки может равняться значению term_id и это нужно для потенциального отказа от таблицы term_taxonomy. Подробнее я писал про это здесь.

/**
 * Делает одинаковыми поля таблиц `wp_terms` и `wp_term_taxonomy` -  `term_taxonomy_id = term_id`
 *
 * С версии WP 4.2 так правильнее.
 *
 * @version 1.0
 */
function term_id_to_term_taxonomy_id(){
	global $wpdb;

	$res = [];

	// найдем наш 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" )
	);

	// установим 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" );

	// увеличим значения, чтобы потом безопасно их изменить -
	// чтобы быть уверенным что никакой 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" );

	// Меняем все ID
	$data = $wpdb->get_results( "SELECT * FROM $wpdb->term_taxonomy WHERE term_id != term_taxonomy_id" );

	$from_to = [];
	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;

}

$res = term_id_to_term_taxonomy_id();

print_r( $res );
Комментариев нет
    Войти