Advertisements

wp_set_object_terms

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

Advertisements

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: