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', [] ); 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 get split terms WP 6.7.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; }