Функция wp_set_object_terms()
используется для установки связи между объектом (например, записью, ссылкой и т.д.) и термином в рамках указанной таксономии. Если указанный термин еще не существует, функция автоматически его создаст.
Термин имеет смысл только в контексте таксономии, к которой он принадлежит. Поэтому важно правильно указать как сам термин, так и таксономию, к которой он относится.
wp_set_object_terms( int $object_id, string|int|array $terms, string $taxonomy, bool $append = false ): array|WP_Error
Аргументы
$object_id
(int, обязательный): ID объекта (например, поста или ссылки), к которому нужно привязать термин.$terms
(string|int|array, обязательный): Название термина (слаг), ID термина или массив названий/ID терминов, которые будут связаны с объектом. Если передан массив, он заменяет все существующие связи объекта с терминами этой таксономии. Пустой массив удаляет все связи.$taxonomy
(string, обязательный): Название таксономии, в рамках которой создается связь (например,category
для категорий илиpost_tag
для тегов).$append
(bool, опциональный): Логический флаг, указывающий, нужно ли добавлять новые термины к существующим (true
), или заменить старые термины новыми (false
). По умолчаниюfalse
.
Возвращаемое значение
Функция возвращает:
- Массив — массив ID терминов таксономии, к которым был привязан объект.
WP_Error
— в случае ошибки, например, если указанная таксономия некорректна.
Примечания
- Если вы передаете ID термина в виде строки, WordPress создаст новый термин с таким именем. Убедитесь, что передаете целочисленные ID.
- В случае успешного выполнения функции возвращается массив ID терминов таксономии, а не ID самих терминов.
1. Привязка записи к категориям
Пример демонстрирует, как добавить запись с ID 123 в категории с ID 6 и 8. Все существующие категории этой записи будут заменены.
$post_id = 123;
$cat_ids = array( 6, 8 );
wp_set_object_terms( $post_id, $cat_ids, 'category' );
2. Удаление записи из всех категорий
Чтобы удалить запись 123 из всех категорий, нужно передать пустое значение для аргумента $terms
.
wp_set_object_terms( 123, null, 'category' );
3. Добавление записи в метки
В этом примере создаются метки с названиями «метка1» и «метка2» (если их еще нет), и запись с ID 123 добавляется в эти метки.
wp_set_object_terms( 123, array('метка1', 'метка2'), 'post_tag' );
4. Добавление категорий к существующим
В этом примере добавляются категории с ID 6 и 8 к записи с ID 123, при этом существующие категории сохраняются.
$post_id = 123;
$cat_ids = array( 6, 8 );
wp_set_object_terms( $post_id, $cat_ids, 'category', true );
5. Работа с произвольной таксономией
Функция может быть использована для работы с произвольными таксономиями. В этом примере запись 100 привязывается к термину с ID 5 в таксономии «genre».
$post_id = 100;
$term_id = 5;
wp_set_object_terms( $post_id, $term_id, 'genre' );
Особенности использования
- Создание новых терминов: Если передан слаг (строка) вместо ID термина, WordPress автоматически создаст новый термин с этим именем.
- Удаление существующих связей: Если параметр
$append
равенfalse
, все существующие термины в рамках указанной таксономии будут удалены, и объект будет связан только с новыми терминами. - Работа с объектами: Функция может быть использована не только для постов, но и для других объектов, например, ссылок или произвольных типов записей.
Заключение
Функция wp_set_object_terms()
предоставляет гибкий способ работы с терминами и таксономиями, позволяя не только связывать объекты с существующими терминами, но и автоматически создавать новые термины.