# WP_DELETE_OBJECT_TERM_RELATIONSHIPS() │ WP 2.3.0
Функция wp_delete_object_term_relationships() используется для удаления связей между объектом и терминами в таксономии (группировке терминов). Эта функция позволяет удалить все связи объекта с терминами определенной таксономии, но не удаляет сам термин или таксономию.
**Использует:** wp_remove_object_terms()
**Хуки:** Нет.
## Возв��ат
Функция ничего не возвращает (null).
## Использование
```php
wp_delete_object_term_relationships( $object_id, $taxonomies );
Параметры
$object_id(int) (обязательный) — ID объекта, который ссылается на термин.$taxonomies(string|array) (обязательный) — список имен таксономий или одно имя таксономии.
Примеры
Удаление тегов из поста
Предположим, у нас есть теги "один" и "два", которые прикреплены к посту с ID 567, и нам нужно удалить эти связи (удалить теги из поста):
wp_delete_object_term_relationships( 567, 'post_tag' );
Удаление связей нескольких таксономий для поста
Предположим, у нас есть пост с ID 55 и мы хотим удалить связи с несколькими таксономиями:
$post_id = 55;
$taxonomies = [ 'category', 'post_tag', 'custom_taxonomy' ];
wp_delete_object_term_relationships( $post_id, $taxonomies );
Разделение постов между двумя таксономиями
Допустим, у нас есть две таксономии: "музыка" и "композиторы", и некоторые посты находятся в обоих этих таксономиях. Мы хотим выбрать все посты из таксономии "музыка" и убрать их из таксономии "композиторы", если такая связь существует.
Таким образом, мы разделим все посты на две таксономии: пост будет находиться либо в "музыка", либо в "композиторы".
function del_tax_rel( $leave_in, $del_from ) {
global $wpdb;
$sql = "SELECT p.ID, post_title
FROM $wpdb->posts p
JOIN $wpdb->term_relationships rel ON (rel.object_id = p.ID)
JOIN $wpdb->term_taxonomy tx ON (rel.term_taxonomy_id = tx.term_taxonomy_id)
WHERE p.post_status = 'publish'
AND tx.taxonomy = '$leave_in'";
$results = $wpdb->get_results( $sql );
if( ! $results ){
return false;
}
foreach( $results as $pst ){
wp_delete_object_term_relationships( $pst->ID, $del_from );
}
}
Удаление поста из категории
Давайте удалим пост с ID 10 из термина (категории) с ID 1, то есть разорвем связь указанного объекта (поста) с элементом таксономии (термином):
$object_id = 10;
$delete_terms = [ 1 ];
global $wpdb;
if( $delete_terms ){
$in_delete_terms = "'" . implode( "', '", $delete_terms ) . "'";
do_action( 'delete_term_relationships', $object_id, $delete_terms );
$wpdb->query( $wpdb->prepare(
"DELETE FROM $wpdb->term_relationships WHERE object_id = %d AND term_taxonomy_id IN ($in_delete_terms)",
$object_id
) );
do_action( 'deleted_term_relationships', $object_id, $delete_terms );
wp_update_term_count( $delete_terms, $taxonomy );
}
Вы можете указать несколько терминов таксономии в массиве: [ 1, 2, 67 ].
Этот пример не совсем подходит для функции wp_delete_object_term_relationships(), но он схож по сути, поскольку также разрывает связь между объектом и элементом таксономии. Разница заключается в том, что здесь разрывается связь с одним и��и несколькими указанными элементами, в то время как wp_delete_object_term_relationships() удаляет все связи с таксономией.
Изменения
С версии 2.3.0 — введена функция.
Код функции
function wp_delete_object_term_relationships( $object_id, $taxonomies ) {
$object_id = (int) $object_id;
if ( ! is_array( $taxonomies ) ) {
$taxonomies = array( $taxonomies );
}
foreach ( (array) $taxonomies as $taxonomy ) {
$term_ids = wp_get_object_terms( $object_id, $taxonomy, array( 'fields' => 'ids' ) );
$term_ids = array_map( 'intval', $term_ids );
wp_remove_object_terms( $object_id, $term_ids, $taxonomy );
}
}
Связанные функции
category_exists()get_term()get_term_by()get_term_children()get_terms()wp_delete_term()wp_get_object_terms()wp_set_object_terms()
Эти функции работают с терминами и таксономиями и могут быть полезны при работе с wp_delete_object_term_relationships().