wp_delete_term() │ WP 2.3.0 Видаляє термін (категорію, мітку) із Бази Даних.
Якщо поточний термін є батьківським для інших, то після його видалення дочірні терміни пересунуться на рівень вище.
Разом із терміном видаляються всі пов’язані метадані. Дивіться: delete_metadata_by_mid() .
Повертає true|false|int|WP_Error
.
true
– Якщо все пройшло вдало.false
– якщо не вдалося вилучити термін.0
– якщо цей термін видаляти не можна.wp_error
– якщо такси немає.Використання wp_delete_term( $term_id, $taxonomy, $args );
$term_id
(число) (обов’язковий)
ID терміну, який потрібно видалити. Наприклад, id рубрики.
$taxonomy
(рядок) (обов’язковий)
Таксономія, до якої належить термін. Наприклад, категорії для рубрик.
$args
(масив) Параметри видалення терміна. Зокрема, тут можна вказати, куди поміщати об’єкти терміну, що видаляється (пости рубрики, що видаляється), якщо вони залишаються “осиротілими” (без будь-якого терміну).
Іншими словами, тут ми можемо вказати базовий термін (рубрику), куди збиратимуться всі осиротілі записи. Можна вказати два параметри:
default
(число) – після видалення осиротілі записи будуть прикріплені до зазначеного терміну.force_default
(логічний) – якщо true, то записи з віддаленого терміну потраплять у вказаний у default термін, незалежно, залишаються вони осиротілими чи ні (лишилися вони інші мітки чи ні).Для таксономії category , default береться з налаштування: «Рубрика за замовчуванням».
За замовчуванням: []
Приклади #1 Видалимо елемент таксономії Видалимо термін 25, який знаходиться в таксономії category
. Інакше кажучи, видалимо рубрику з ID 25.
wp_delete_term(25, 'category'); #2 Приклад використання аргументів Видалимо термін 25, таксономії “books”. При цьому помістимо всі записи цього терміна в термін 15 (параметр default) і не важливо, чи залишаються ці записи осиротілими (параметр force_default)
wp_delete_term( 25, 'books', [ 'default'=>15, 'force_default'=>true ] ); Додати свій приклад
нотатки Global. wpdb. $wpdb WordPress database abstraction object. список змін Код wp_delete_term() wp delete term WP 6.0.2 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.
}
}
// Не можу розраховувати на дефект 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 коли вирівнюють термін, до будь-яких змін є виконані для повідомлень або термінів.
*
* @ 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 resigned a parent.
*
* @ Since 2.9.0
*
* @param array $edit_tt_ids На array of term taxonomy IDs для 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 resigned a parent.
*
* @ Since 2.9.0
*
* @param array $edit_tt_ids На array of term taxonomy IDs для given term.
*/
do_action( 'edited_term_taxonomies', $edit_tt_ids );
}
// Get the term before deleting it or its term relationships as 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 );
continue;
}
$terms = wp_get_object_terms(
$object_id,
$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_id, $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( $object_ids, $object_type );
}
$term_meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->termmeta WHERE term_id = %d ", $term ) );
foreach ( $term_meta_ids as $mid ) {
delete_metadata_by_mid( 'term', $mid );
}
/**
* Fires immediately before a term taxonomy ID is deleted.
*
* @ Since 2.9.0
*
* @param int $tt_id Term taxonomy ID.
*/
do_action( 'delete_term_taxonomy', $ tt_id );
$wpdb->delete( $wpdb->term_taxonomy, array( 'term_taxonomy_id' => $tt_id ) );
/**
* Fires immediately after a term taxonomy ID is deleted.
*
* @ Since 2.9.0
*
* @param int $tt_id Term taxonomy 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->delete( $wpdb->terms, array( 'term_id' => $term ) );
}
clean_term_cache($term, $taxonomy);
/**
* Fires after a term is deleted from the database and the cache is cleaned.
*
* The {@see 'delete_$taxonomy'} hook is also available for targeting a specific
* taxonomy.
*
* @ Since 2.5.0
* @since 4.5.0 Introduced the `$object_ids` argument.
*
* @param int $term Term ID.
* @param int $tt_id Term taxonomy ID.
* @param string $taxonomy Taxonomy slug.
* @param WP_Term $deleted_term Copy of already-deleted term.
* @param array $object_ids List of term object IDs.
*/
do_action( 'delete_term', $term, $tt_id, $taxonomy, $deleted_term, $object_ids );
/**
* Fires after a term in a specific taxonomy is deleted.
*
* The dynamic portion of the hook name, `$taxonomy`, refers to the specific
* taxonomy the term belonged to.
*
* Possible hook names include:
*
* - `delete_category`
* - `delete_post_tag`
*
* @ Since 2.3.0
* @since 4.5.0 Introduced the `$object_ids` argument.
*
* @param int $term Term ID.
* @param int $tt_id Term taxonomy ID.
* @param WP_Term $deleted_term Copy of already-deleted term.
* @param array $object_ids List of term object IDs.
*/
do_action( "delete_{$taxonomy}", $term, $tt_id, $deleted_term, $object_ids );
return true;
} Зв’язані функції