Advertisements

wp_delete_term

Definition:
function wp_delete_term( $term, $taxonomy, $args = array() {}

Removes a term from the database.
If the term is a parent of other terms, then the children will be updated to that term’s parent.

Parameters

  • int $term: Term ID
  • string $taxonomy: Taxonomy Name
  • array|string $args: Optional. Change ‘default’ term id and override found term ids.

Return values

returns:Returns false if not term; true if completes delete action.

Defined actions

  • edit_term_taxonomies
    do_action( 'edit_term_taxonomies', $edit_tt_ids );
  • edited_term_taxonomies
    do_action( 'edited_term_taxonomies', $edit_tt_ids );
  • delete_term_taxonomy
    do_action( 'delete_term_taxonomy', $tt_id );
  • deleted_term_taxonomy
    do_action( 'deleted_term_taxonomy', $tt_id );
  • delete_term
    do_action('delete_term', $term, $tt_id, $taxonomy);
  • delete_$taxonomy
    do_action("delete_$taxonomy", $term, $tt_id);

Source code

function wp_delete_term( $term, $taxonomy, $args = array() ) {

	global $wpdb;



	$term = (int) $term;



	if ( ! $ids = term_exists($term, $taxonomy) )

		return false;

	if ( is_wp_error( $ids ) )

		return $ids;



	$tt_id = $ids['term_taxonomy_id'];



	$defaults = array();



	if ( 'category' == $taxonomy ) {

		$defaults['default'] = get_option( 'default_category' );

		if ( $defaults['default'] == $term )

			return 0; // Don't delete the default category

	}



	$args = wp_parse_args($args, $defaults);

	extract($args, EXTR_SKIP);



	if ( isset( $default ) ) {

		$default = (int) $default;

		if ( ! term_exists($default, $taxonomy) )

			unset($default);

	}



	// Update children to point to new parent

	if ( is_taxonomy_hierarchical($taxonomy) ) {

		$term_obj = get_term($term, $taxonomy);

		if ( is_wp_error( $term_obj ) )

			return $term_obj;

		$parent = $term_obj->parent;



		$edit_tt_ids = $wpdb->get_col( "SELECT `term_taxonomy_id` FROM $wpdb->term_taxonomy WHERE `parent` = " . (int)$term_obj->term_id );

		do_action( 'edit_term_taxonomies', $edit_tt_ids );

		$wpdb->update( $wpdb->term_taxonomy, compact( 'parent' ), array( 'parent' => $term_obj->term_id) + compact( 'taxonomy' ) );

		do_action( 'edited_term_taxonomies', $edit_tt_ids );

	}



	$objects = $wpdb->get_col( $wpdb->prepare( "SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id = %d", $tt_id ) );



	foreach ( (array) $objects as $object ) {

		$terms = wp_get_object_terms($object, $taxonomy, array('fields' => 'ids', 'orderby' => 'none'));

		if ( 1 == count($terms) && isset($default) ) {

			$terms = array($default);

		} else {

			$terms = array_diff($terms, array($term));

			if (isset($default) && isset($force_default) && $force_default)

				$terms = array_merge($terms, array($default));

		}

		$terms = array_map('intval', $terms);

		wp_set_object_terms($object, $terms, $taxonomy);

	}



	// Clean the relationship caches for all object types using this term

	$tax_object = get_taxonomy( $taxonomy );

	foreach ( $tax_object->object_type as $object_type )

		clean_object_term_cache( $objects, $object_type );



	do_action( 'delete_term_taxonomy', $tt_id );

	$wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = %d", $tt_id ) );

	do_action( 'deleted_term_taxonomy', $tt_id );



	// Delete the term if no taxonomies use it.

	if ( !$wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->term_taxonomy WHERE term_id = %d", $term) ) )

		$wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->terms WHERE term_id = %d", $term) );



	clean_term_cache($term, $taxonomy);



	do_action('delete_term', $term, $tt_id, $taxonomy);

	do_action("delete_$taxonomy", $term, $tt_id);



	return true;

}

3599

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: