Описание
Прикрепляет запись к термину (элементу таксономии). Например, с помощью этой функции мы можем поместить нужный пост в указанную(ые) категорию.
Нужно чтобы термин был в указанной таксономии. Нет смысла указывать термин(ы), если строго не определить к какой таксономии он(и) относится.
wp_set_object_terms() используется в: wp_set_post_categories(), wp_set_post_terms().
Функция возвращает идентификаторы - массив ID терминов, которые были добавлены/прикреплены к записи или WP_Error объект.
Использование
<?php wp_set_object_terms( $object_id, $terms, $taxonomy, $append ) ?>
Параметры
- $object_id (число) (обязательный)
- ID записи, которую нужно связать с термином. Например, ID поста.
По умолчанию: нет - $terms (строка/массив/число) (обязательный)
- Название (slug) или ID термина(ов) (например ID категорий).
По умолчанию: нет - $taxonomy (строка/массив) (обязательный)
- Таксономия(ии) к которой принадлежат указанные термины, которые нужно связать с записью. Например, может быть 'category', 'post_tag' или название произвольной таксономии.
По умолчанию: нет - $append (логический)
- Если установлено в false (по умолчанию), то старая связь записи с терминами будет разорвана и установлена связь с новыми (указанными) терминами. Если true, то старые связи будут заменены при совпадении и добавлены новые.
По умолчанию: false
Примеры
1. Укажем рубрики для записи
Пример, показывающий как добавить запись 42 в категории 6 и 8:
<?php $cat_ids = array( 6,8 );
// чтобы убедится, что термины переданы как числа:
// $cat_ids = array_map('intval', $cat_ids);
wp_set_object_terms( '42', $cat_ids, 'category' ); ?>
2. Удалим запись из всех рубрик
Если нужно удалить запись 42 из всех рубрик (даже которая установлена по умолчанию):
<?php wp_set_object_terms( '42', NULL, 'category' ); ?>
wp_set_object_terms()
из файла: /wp-includes/taxonomy.php WP 3.3.2function wp_set_object_terms($object_id, $terms, $taxonomy, $append = false) {
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);
if ( ! $append )
$old_tt_ids = wp_get_object_terms($object_id, $taxonomy, array('fields' => 'tt_ids', 'orderby' => 'none'));
else
$old_tt_ids = array();
$tt_ids = array();
$term_ids = array();
$new_tt_ids = array();
foreach ( (array) $terms as $term) {
if ( !strlen(trim($term)) )
continue;
if ( !$term_info = term_exists($term, $taxonomy) ) {
// Skip if a non-existent term ID is passed.
if ( is_int($term) )
continue;
$term_info = wp_insert_term($term, $taxonomy);
}
if ( is_wp_error($term_info) )
return $term_info;
$term_ids[] = $term_info['term_id'];
$tt_id = $term_info['term_taxonomy_id'];
$tt_ids[] = $tt_id;
if ( $wpdb->get_var( $wpdb->prepare( "SELECT term_taxonomy_id FROM $wpdb->term_relationships WHERE object_id = %d AND term_taxonomy_id = %d", $object_id, $tt_id ) ) )
continue;
do_action( 'add_term_relationship', $object_id, $tt_id );
$wpdb->insert( $wpdb->term_relationships, array( 'object_id' => $object_id, 'term_taxonomy_id' => $tt_id ) );
do_action( 'added_term_relationship', $object_id, $tt_id );
$new_tt_ids[] = $tt_id;
}
if ( $new_tt_ids )
wp_update_term_count( $new_tt_ids, $taxonomy );
if ( ! $append ) {
$delete_terms = array_diff($old_tt_ids, $tt_ids);
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);
}
}
$t = get_taxonomy($taxonomy);
if ( ! $append && isset($t->sort) && $t->sort ) {
$values = array();
$term_order = 0;
$final_tt_ids = wp_get_object_terms($object_id, $taxonomy, array('fields' => 'tt_ids'));
foreach ( $tt_ids as $tt_id )
if ( in_array($tt_id, $final_tt_ids) )
$values[] = $wpdb->prepare( "(%d, %d, %d)", $object_id, $tt_id, ++$term_order);
if ( $values )
$wpdb->query("INSERT INTO $wpdb->term_relationships (object_id, term_taxonomy_id, term_order) VALUES " . join(',', $values) . " ON DUPLICATE KEY UPDATE term_order = VALUES(term_order)");
}
do_action('set_object_terms', $object_id, $terms, $tt_ids, $taxonomy, $append, $old_tt_ids);
return $tt_ids;
}Связанные Функции
Смотрите также: Функции WordPress и Теги Шаблона.