wp_get_split_terms()WP 4.2.0

Получает данные об элементах таксономии, которые были с одинаковыми ID и были разделены с версии WP 4.2.

В ранних версиях (ниже 4.2). Элементы таксономии в таблице wp_terms записывались так, что если 2 элемента разных таксономий имеют одинаковые названия, то они просто прикреплялись к одной записи таблицы, т.е. оба элемента имели один ID.

С версии WP 4.2 такие элементы разделяются и каждый элемент таксономии будет иметь свой уникальный ID, даже если 2 элемента разных таксономий имеют одинаковые названия и ярлыки.

Эта функция для тех случаев, когда нужно получить данные о таком разделении, уже после того как разделение произошло.

Как обновить свою БД после разделения, чтобы она подходила под новый формат, читайте в этой заметке.

Хуков нет.

Возвращает

Массив. Массив новых ID, ключ которых - название таксономии.

Использование

wp_get_split_terms( $old_term_id );
$old_term_id(число) (обязательный)
ID предыдущего элемента таксономии, который был разделен.

Примеры

0

#1 Исправляем ID элементов таксономии в опции 'featured_tags' после разделения

Рекомендуемый метод исправления это хук split_shared_term. Однако, когда плагин обновился после разделения, прицепиться к этому хуку уже невозможно. В этом случае поможет wp_get_split_terms(), которая хранит информацию о разделении.

Предположим плагин хранил ID терминов в опции featured_tags. Нам нужно убедиться что ни один из терминов сохраненных в featured_tags не был разделен, а если был, то нужно обновить ID в этой опции.

function featured_tags_check_for_split_terms() {
	$featured_tag_ids = get_option( 'featured_tags', array() );

	// Проверим есть ли ID терминов из таксономии `post_tag`, которые были разделены
	foreach ( $featured_tag_ids as $index => $featured_tag_id ) {
		$split_terms = wp_get_split_terms( $featured_tag_id, 'post_tag' );

		if ( ! empty( $split_terms ) ) {
			foreach ( $split_terms as $split_term ) {
				// Заменяем старые ID новыми
				$featured_tag_ids[ $index ] = $split_term['post_tag'];
			}
		}
	}

	// Обновляем
	update_option( 'featured_tags', $featured_tag_ids );
}
0

#2 Проверим есть ли данные о разделении элементов таксономии на сайте

Чтобы проверить было ли разделение элементов таксономии вообще, запустите такой код, поместив его functions.php:

$split_terms = get_option( '_split_terms', [] );

if( $split_terms ){
	// разделение было и есть данные о разделении
}
else {
	// данных о разделении нет (но код разделения скорее всего сработал)
	// просто у вас не оказалось терминов с одинаковыми ИД
}
print_r( $split_terms );

/* выведет:
Array
(
	[3] => Array
		(
			[post_tag] => 591
		)

	[18] => Array
		(
			[post_tag] => 592
		)
)
*/

Если результат выведет array(), то после разделения у вас не было терминов с одинаковыми ИД и опцию можно удалить без последствий:

delete_option( '_split_terms' );

Список изменений

С версии 4.2.0 Введена.

Код wp_get_split_terms() WP 6.5.2

function wp_get_split_terms( $old_term_id ) {
	$split_terms = get_option( '_split_terms', array() );

	$terms = array();
	if ( isset( $split_terms[ $old_term_id ] ) ) {
		$terms = $split_terms[ $old_term_id ];
	}

	return $terms;
}