wp_remove_object_terms() WP 3.6.0

Розриває зв’язок між зазначеним об’єктом та зазначеним терміном, тобто. видаляє запис із елемента таксономії (рубрики).

Після видалення зв’язку кількість записів у терміні перераховується за допомогою wp_update_term_count() .

Використовуйте wp_delete_object_term_relationships() , щоб видалити всі зв’язки об’єкта з таксономією.

Прямо перед видаленням зв’язку спрацьовує подію delete_term_relationshipsі відразу після видалення спрацьовує deleted_term_relationships. Події передають змінні: $object_id – ID об’єкта, що обробляється, і $tt_ids – ID термінів таксономій (це не ID терміна), зв’язок з якими розривається.

Працює на основі:
term_exists()

Повертає

true|false|WP_Error.

  • true– Якщо вдалося розірвати зв’язок.
  • falseабо об’єкт WP_Error– у разі невдачі.

Використання

wp_remove_object_terms( $object_id, $terms, $taxonomy );
$object_id
(число) (обов’язковий)
ID об’єкта, який необхідно видалити з термінів. Під об’єктом мається на увазі будь-який запис: пост, сторінка, посилання, довільний тип запису.
$terms
(рядок/масив/число/об’єкт) (обов’язковий)

ID/ярлик/об’єкт терміна з якого видалятиметься вказаний в $object_id об’єкт. Можна вказати кілька термінів у масиві одночасно.

Якщо вказується ID, то значення має бути типу “число”, а не рядок у вигляді чила. Наприклад , 12а не '12'. Вказані тут значення передаються в term_exists() – дивіться там.

$taxonomy
(рядок/масив) (обов’язковий)
Назва таксономії, в якій знаходяться терміни. Можна вказати рядок чи масив рядків кількох таксономій.

Приклади

1

#1 Видалення мітки у посту

Приклад, що демонструє, як видалити запис з терміну таксономії:

$post_id = 5;
$terms = 'sweet';
$taxonomy = 'post_tag';

$done = wp_remove_object_terms( $post_id, $terms, $taxonomy );

if( $done ){
	echo "Мітка запису видалена.";
}
else {
	echo "Не вдалося видалити позначку.";
}

нотатки

  • Global. wpdb. $wpdb WordPress database abstraction object.

список змін

З версії 3.6.0Введено.

Код wp_remove_object_terms() WP 6.0.2

function wp_remove_object_terms( $object_id, $terms, $taxonomy ) {
	Global $wpdb;

	$object_id = (int) $object_id;

	if ( ! taxonomy_exists( $taxonomy ) ) {
		return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy.' ) );
	}

	if ( ! is_array( $terms ) ) {
		$ terms = array ($ terms);
	}

	$tt_ids = array();

	foreach ((array) $terms as $term) {
		if ( '' === trim( $term ) ) {
			continue;
		}

		$ term_info = term_exists ($ term, $ taxonomy);
		if ( ! $term_info ) {
			// Skip if a non-existent term ID is passed.
			if ( is_int( $term ) ) {
				continue;
			}
		}

		if ( is_wp_error( $term_info ) ) {
			return $term_info;
		}

		$tt_ids[] = $term_info['term_taxonomy_id'];
	}

	if ( $tt_ids ) {
		$in_tt_ids = "'" . implode( "', '", $tt_ids ) . "'";

		/**
		 * Fires immediately before object-term relationship is deleted.
		 *
		 * @ Since 2.9.0
		 * @since 4.7.0 Added `$taxonomy` parameter.
		 *
		 * @param int $object_id Object ID.
		 * @param array $tt_ids На array of term taxonomy IDs.
		 * @param string $taxonomy Taxonomy slug.
		 */
		do_action( 'delete_term_relationships', $object_id, $tt_ids, $taxonomy);

		$deleted = $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->term_relationships WHERE object_id = %d AND term_taxonomy_id IN ($in_tt_ids)", $object_id ) );

		wp_cache_delete( $object_id, $taxonomy . '_relationships' );
		wp_cache_delete( 'last_changed', 'terms');

		/**
		 * Fires immediately after object-term relationship is deleted.
		 *
		 * @ Since 2.9.0
		 * @since 4.7.0 Added `$taxonomy` parameter.
		 *
		 * @param int $object_id Object ID.
		 * @param array $tt_ids На array of term taxonomy IDs.
		 * @param string $taxonomy Taxonomy slug.
		 */
		do_action( 'deleted_term_relationships', $object_id, $tt_ids, $taxonomy);

		wp_update_term_count( $tt_ids, $taxonomy );

		return (bool) $deleted;
	}

	return false;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *