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

February 12, 2011 


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