Definition:
function wp_set_object_terms($object_id, $terms, $taxonomy, $append = false) {}
Create Term and Taxonomy Relationships.
Relates an object (post, link etc) to a term and taxonomy type. Creates the term and taxonomy relationship if it doesn’t already exist. Creates a term if it doesn’t exist (using the slug).
Parameters
- int $object_id: The object to relate to.
- array|int|string $terms: The slug or id of the term, will replace all existing related terms in this taxonomy.
- array|string $taxonomy: The context in which to relate the term to the object.
- bool $append: If false will delete difference of terms.
Return values
returns:Affected Term IDs
Defined actions
- add_term_relationship
do_action( 'add_term_relationship', $object_id, $tt_id );
- added_term_relationship
do_action( 'added_term_relationship', $object_id, $tt_id );
- delete_term_relationships
do_action( 'delete_term_relationships', $object_id, $delete_terms );
- deleted_term_relationships
do_action( 'deleted_term_relationships', $object_id, $delete_terms );
- set_object_terms
do_action('set_object_terms', $object_id, $terms, $tt_ids, $taxonomy, $append, $old_tt_ids);
Source code
function 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; }
4107
No comments yet... Be the first to leave a reply!