WordPress как на ладони
wordpress jino

wp_delete_object_term_relationships() WP 2.3.0

Разрушает все связи объекта (пост, страница) с элементами указанной таксономии(й).

Удалит все связи между всеми элементами указанной таксономии (терминами) и указанным объектом (постом, страницей, ссылкой, произвольным типом записи и т.д.). Сам объект таксономии (термин) при этом не удаляется - разрушается только связь с ним.

С помощью этой функции, например, можно удалить все метки у указанного поста, при этом не удаляя самих меток (т.е. разрушить связь поста и меток). Аналогично её можно применить для произвольных таксономий.

Чтобы удалить связь объекта с определенным элементом таксономии (а не со всеми сразу), используйте wp_remove_object_terms().

Работает на основе: wp_remove_object_terms()

Хуков нет.

Возвращает

Ничего не возвращает.

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

<?php wp_delete_object_term_relationships( $object_id, $taxonomies ); ?>
$object_id(число) (обязательный)
ID объекта, связи которого с таксономией нужно разрушить. Объектом может быть ID поста, страницы, вложения и т.д.
По умолчанию: нет
$taxonomies(строка/массив) (обязательный)
Название таксономии или список названий таксономий, связь с которой нужно разрушить.
По умолчанию: нет

Примеры

#1 Удалим метки у поста

Допустим есть метки "один", "два", которые прикреплены к посту 567 и нам нужно убрать эту связь (удалить метки у поста):

<?php wp_delete_object_term_relationships (567, 'post_tag'); ?>

#2 Разделение записей между двумя таксономиями

Предположим, у нас 2 таксономии music и compositors и некоторые посты, которые находятся в терминах обоих этих таксономий. А нам нужно выбрать все посты, которые находятся в таксономии music и удалить их из таксономии compositors, если связь с compositors есть вообще. Таким образом, мы разделим все посты на две таксономии и пост будет находится либо в music, либо в compositors.

del_tax_rel($leave_in='music', $del_from='compositors');

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);
	}
}

#3 Удалим запись из указанной рубрики

Удалим пост (запись) 10 из термина (рубрики) 1, т.е. разрушим связь указанного объекта (пост, страница, запись) с элементом таксономии:

$object_id = 10;
$delete_terms = array(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);  
}

Можно указать несколько элементов таксономии: array(1,2,67).

Этот пример не совсем подходит к этой функции, но он похож, потому что тоже разрушает связь объекта с элементом таксономии. Отличие в том что тут разрушается связь только лишь с 1 или несколькими указными элементами, а функция wp_delete_object_term_relationships() разрушает вообще все связи с таксономией.

Заметки

  • Использует фильтр (действие) delete_term_relationships, срабатывает до удаления связи.

  • Использует фильтр (действие) deleted_term_relationships, срабатывает после удаления связи.

Код wp delete object term relationships: wp-includes/taxonomy.php VER 4.9.1

<?php
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 );
	}
}

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

Из метки: term (термины таксономий)

Еще из раздела: Для записей

wp_delete_object_term_relationships Комментариев нет

Здравствуйте, !

Ваш комментарий