wp_get_split_terms

Получает данные об элементах таксономии, которые были с одинаковыми 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 предыдущего элемента таксономии, который был разделен.

Примеры

#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 );
}

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

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

$split_terms = get_option( '_split_terms', array() );

wp_die( '<pre>'. print_r( $split_terms, 1 ) .'</pre>' );

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

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

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

delete_option('_split_terms');

Код из


wp-includes/taxonomy.php

WP 4.7.2

<?php
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;
}