Как использовать функцию wp_get_split_terms() в WordPress 4.2.0

# WP_GET_SPLIT_TERMS() │ WP 4.2.0

Функция wp_get_split_terms() позволяет получить информацию о терминах, которые ранее имели один идентификатор (term_id), но затем были разделены на несколько.

## Хуки

Эта функция не использует хуки.

## Возврат значения

Функция возвращает массив, содержащий новые идентификаторы терминов, упорядоченные по таксономиям.

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

```php
wp_get_split_terms( $old_term_id );

Параметры

  • $old_term_id (int, обязательный): Идентификатор термина, который был до разделения.

Примеры использования

Пример #1: Исправление идентификаторов терминов в опции 'featured_tags'

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

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

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

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

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

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

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

Чтобы проверить, произошла ли вообще операция разделения, выполните следующий код:

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

if( $split_terms ){
    // Разделение произошло, и есть данные о разделении
} else {
    // Данных о разделении нет (но код разделения скорее всего сработал)
    // Возможно, у вас просто не оказалось терминов с одинаковыми ID
}

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-includes/taxonomy.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;
}

Связанные функции

Таксономии (категории, метки)

  • _update_post_term_count()
  • get_ancestors()
  • get_term_parents_list()
  • WP_Tax_Query()
  • wp_terms_checklist()

Эти функции помогают управлять таксономиями и термином в WordPress более эффективно.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *