wp_delete_term() – Removes a term from the database.

You appear to be a bot. Output may be restricted

Description

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. Metadata associated with the term will be deleted.

Usage

$bool|int|WP_Error = wp_delete_term( $term, $taxonomy, $args );

Parameters

$term
( int ) required – Term ID.
$taxonomy
( string ) required – Taxonomy name.
$args
( array|string ) optional – { Optional. Array of arguments to override the default term ID. Default empty array.
$default
( int ) optional – The term ID to make the default term. This will only override the terms found if there is only one term found. Any other and the found terms are used.
$force_default
( bool ) optional – Optional. Whether to force the supplied term as default to be assigned even if the object was not going to be term-less. Default false. }

Returns

bool|int|WP_Error True on success, false if term does not exist. Zero on attempted deletion of default Category. WP_Error if the taxonomy does not exist.

Source

File name: wordpress/wp-includes/taxonomy.php
Lines:

1 to 100 of 203
function wp_delete_term( $term, $taxonomy, $args = array() ) {
  global $wpdb;

  $term = (int) $term;

  $ids = term_exists( $term, $taxonomy );
  if ( ! $ids ) {
    return false;
  }
  if ( is_wp_error( $ids ) ) {
    return $ids;
  }

  $tt_id = $ids['term_taxonomy_id'];

  $defaults = array();

  if ( 'category' === $taxonomy ) {
    $defaults['default'] = (int) get_option( 'default_category' );
    if ( $defaults['default'] === $term ) {
      return 0; // Don't delete the default category.
    }
  }

  // Don't delete the default custom taxonomy term.
  $taxonomy_object = get_taxonomy( $taxonomy );
  if ( ! empty( $taxonomy_object->default_term ) ) {
    $defaults['default'] = (int) get_option( 'default_term_' . $taxonomy );
    if ( $defaults['default'] === $term ) {
      return 0;
    }
  }

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

  if ( isset( $args['default'] ) ) {
    $default = (int) $args['default'];
    if ( ! term_exists( $default, $taxonomy ) ) {
      unset( $default );
    }
  }

  if ( isset( $args['force_default'] ) ) {
    $force_default = $args['force_default'];
  }

  
/**
 * Fires when deleting a term, before any modifications are made to posts or terms.
 *
 * @since 4.1.0
 *
 * @param int    $term     Term ID.
 * @param string $taxonomy Taxonomy name.
 */
  do_action( 'pre_delete_term', $term, $taxonomy );

  // 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_ids    = $wpdb->get_results( "SELECT term_id, term_taxonomy_id FROM $wpdb->term_taxonomy WHERE `parent` = " . (int) $term_obj->term_id );
    $edit_tt_ids = wp_list_pluck( $edit_ids, 'term_taxonomy_id' );

    
/**
 * Fires immediately before a term to delete's children are reassigned a parent.
 *
 * @since 2.9.0
 *
 * @param array $edit_tt_ids An array of term taxonomy IDs for the given term.
 */
    do_action( 'edit_term_taxonomies', $edit_tt_ids );

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

    // Clean the cache for all child terms.
    $edit_term_ids = wp_list_pluck( $edit_ids, 'term_id' );
    clean_term_cache( $edit_term_ids, $taxonomy );

    
/**
 * Fires immediately after a term to delete's children are reassigned a parent.
 *
 * @since 2.9.0
 *
 * @param array $edit_tt_ids An array of term taxonomy IDs for the given term.
 */
    do_action( 'edited_term_taxonomies', $edit_tt_ids );
  }

  // Get the term before deleting it or its term relationships so we can pass to actions below.
  $deleted_term = get_term( $term, $taxonomy );

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

  foreach ( $object_ids as $object_id ) {
    if ( ! isset( $default ) ) {
      wp_remove_object_terms( $object_id, $term, $taxonomy );
 

 View on GitHub View on Trac