Функция wp_delete_object_term_relationships()
предназначена для удаления связей между объектами (например, постами или страницами) и таксономиями в WordPress. Эта функция не удаляет сами термины или таксономии, а лишь разрушает связи между ними.
wp_delete_object_term_relationships( int $object_id, string|array $taxonomies )
Описание
Эта функция позволяет удалить все связи объекта с терминами определённой таксономии или таксономиями. Если вам нужно удалить только одну конкретную связь, вы можете использовать функцию wp_remove_object_terms()
.
Параметры
- $object_id(обязательный):
- Тип:
int
- ID объекта (например, поста или страницы), связи которого с таксономией нужно удалить.
- Тип:
- $taxonomies(обязательный):
- Тип:
string|array
- Название таксономии или массив названий таксономий, связи с которыми необходимо удалить.
- Тип:
Возвращаемое значение
Функция ничего не возвращает, но выполняет удаление всех указанных связей.
Пример 1: Удаление меток у поста
Предположим, у нас есть пост с ID 101, к которому прикреплены метки «технологии» и «новости». Чтобы удалить все метки у этого поста, можно использовать следующий код:
<?php wp_delete_object_term_relationships(101, 'post_tag'); ?>
После выполнения этой команды пост с ID 101 больше не будет иметь никаких меток.
Пример 2: Удаление связей с несколькими таксономиями
Допустим, пост с ID 202 имеет связи с несколькими таксономиями: «категории», «метки» и пользовательская таксономия «жанр». Чтобы удалить все связи, используйте такой код:
$post_id = 202;
$taxonomies = array('category', 'post_tag', 'genre');
wp_delete_object_term_relationships($post_id, $taxonomies);
После этого все связи поста 202 с указанными таксономиями будут удалены.
Пример 3: Разделение постов между двумя таксономиями
Предположим, у нас есть две таксономии: фильмы
и актеры
, и некоторые посты находятся в терминах обеих таксономий. Если мы хотим удалить связи постов из таксономии актеры
, если они также присутствуют в фильмы
, можно использовать следующий код:
function split_tax_relationships($keep_in, $remove_from) {
global $wpdb;
$sql = "SELECT p.ID, post_title
FROM $wpdb->posts p
JOIN $wpdb->term_relationships tr ON (tr.object_id = p.ID)
JOIN $wpdb->term_taxonomy tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id)
WHERE p.post_status = 'publish' AND tt.taxonomy = '$keep_in'";
$posts = $wpdb->get_results($sql);
if (!$posts) {
return false;
}
foreach ($posts as $post) {
wp_delete_object_term_relationships($post->ID, $remove_from);
}
}
// Вызов функции для удаления постов из таксономии 'актеры'
split_tax_relationships('фильмы', 'актеры');
Этот код выберет все опубликованные посты из таксономии фильмы
и удалит их связи с таксономией актеры
.
Пример 4: Удаление записи из определенной категории
Допустим, нам нужно удалить пост с ID 305 из категории с ID 10. Сделать это можно следующим образом:
$object_id = 305;
$delete_terms = array(10);
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, 'category');
}
Этот пример показывает, как удалить связь конкретного объекта (поста) с определённым термином.
Заключение
Функция wp_delete_object_term_relationships()
предоставляет возможность эффективно управлять связями между объектами и таксономиями в WordPress. С её помощью можно легко удалять ненужные связи, не затрагивая сами термины и таксономии, что делает её мощным инструментом для администраторов и разработчиков WordPress.