wp_remove_object_terms()
— это функция WordPress, которая используется для удаления связи между объектом (например, постом, страницей или произвольным типом записи) и термином таксономии. Эта функция может быть полезна, когда требуется убрать метки, категории или другие таксономии, связанные с объектом.
wp_remove_object_terms( int $object_id, string|int|array $terms, string $taxonomy ): bool|WP_Error
Описание
Функция разрывает связь между указанным объектом (например, постом) и терминами в заданной таксономии. После этого количество записей, связанных с термином, пересчитывается с помощью функции wp_update_term_count()
. Это означает, что после удаления термина из объекта число объектов, связанных с термином, обновится автоматически.
Перед удалением срабатывают хуки delete_term_relationships
, а после удаления — deleted_term_relationships
, которые позволяют разработчикам вмешиваться в процесс.
Параметры
- $object_id (int) — ID объекта, из которого удаляются термины (например, ID поста).
- $terms (string|int|array) — Ярлык (slug), ID или массив терминов, которые нужно удалить из объекта. Можно указать:
- строку (ярлык термина),
- число (ID термина),
- массив строк/ID для удаления нескольких терминов одновременно.
- $taxonomy (string) — Название таксономии, в которой находятся термины (например,
'post_tag'
,'category'
или произвольная таксономия).
Возвращаемые значения
- true — Если удаление прошло успешно.
- false — В случае неудачи.
- WP_Error — Если возникла ошибка, например, если указанная таксономия не существует.
Пример 1: Удаление одного термина (метки) у поста
Этот пример показывает, как удалить метку sweet
из поста с ID 123:
$post_id = 123;
$terms = 'sport';
$taxonomy = 'post_tag';
$done = wp_remove_object_terms( $post_id, $terms, $taxonomy );
if ( $done ) {
echo "Метка записи удалена.";
} else {
echo "Не удалось удалить метку.";
}
Пример 2: Удаление нескольких меток
В этом примере удаляются сразу несколько меток из поста:
$post_id = 123;
$terms = array( 'football', 'tennis' ); // Массив слагов меток
$taxonomy = 'post_tag';
$done = wp_remove_object_terms( $post_id, $terms, $taxonomy );
if ( $done ) {
echo "Метки записи удалены.";
} else {
echo "Не удалось удалить метки.";
}
Пример 3: Удаление термина по его ID
Функция поддерживает удаление терминов не только по их ярлыку, но и по ID. В следующем примере показано, как удалить термин с ID 12:
$post_id = 123;
$terms = 12; // ID термина
$taxonomy = 'category';
$done = wp_remove_object_terms( $post_id, $terms, $taxonomy );
if ( $done ) {
echo "Категория удалена.";
} else {
echo "Не удалось удалить категорию.";
}
Пример 4: Удаление терминов по именам
Хотя официальная документация не указывает на возможность использования имен терминов, это также работает. В следующем примере удаляются термины по их именам:
$post_id = 5;
$post_tags = array(
'Tag name', // Имя первого термина
'Another tag name' // Имя второго термина
);
$done = wp_remove_object_terms( $post_id, $post_tags, 'post_tag' );
if ( $done ) {
echo "Метки по именам удалены.";
} else {
echo "Не удалось удалить метки по именам.";
}
Примечания
- Если требуется полностью удалить все термины объекта для определенной таксономии, стоит рассмотреть использование функции
wp_delete_object_term_relationships()
. - Перед удалением связи вызывается хук
delete_term_relationships
, а после — хукdeleted_term_relationships
, что позволяет вмешиваться в процесс удаления на любом этапе.
Заключение
Функция wp_remove_object_terms()
предоставляет разработчикам простой и гибкий способ удаления терминов из объектов в WordPress. Она поддерживает работу с множеством таксономий и может удалять термины как по ярлыкам, так и по их ID, что делает её удобной для различных задач.