## DELETE_METADATA_BY_MID() │ WP 3.3.0
### Удаление метаданных по ID мета
Функция DELETE_METADATA_BY_MID предназначена для удаления метаданных, связанных с определенной записью, комментариями, категориями или пользователями в WordPress.
### Хуки функции
Функция использует несколько хуков, которые позволяют другим разработчикам подключаться и изменять поведение функции. Вот некоторые из них:
- delete_(meta_type)_metadata_by_mid
- delete_post_metadata_by_mid
- delete_comment_metadata_by_mid
- delete_term_metadata_by_mid
- delete_user_metadata_by_mid
- deleted_(meta_type)_meta
- deleted_postmeta
- deleted_commentmeta
- deleted_termmeta
- deleted_usermeta
### Возврат
Функция возвращает true, если удаление прошло успешно, и false, если произошла ошибка.
### Использование
Для того чтобы использовать эту функцию, вы должны указать тип метаданных и их конкретный ID:
```php
delete_metadata_by_mid( $meta_type, $meta_id );
- $meta_type (string, обязательный) – тип объекта, к которому относятся метаданные. Может быть 'post', 'comment', 'term', 'user' или любой другой тип объекта с ассоциированной таблицей метаданных.
- $meta_id (int, обязательный) – ID конкретной строки метаданных.
Примеры
Удалить все метаданные для термина (категории, теги)
Этот код извлекает и удаляет все метаданные для термина с ID = 15:
// термин с ID = 15
$term = 15;
// Получаем все ID метаданных, которые связаны с термином
$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 );
}
Заметки
- Глобальные переменные: Используйте объект базы данных WordPress
$wpdbдля взаимодействия с базой данных.
Изменения в версии
Функция была введена в версии 3.3.0 WordPress.
Код функции delete_metadata_by_mid
Вот как выглядит реализация функции delete_metadata_by_mid в версии WordPress 6.7.2:
function delete_metadata_by_mid( $meta_type, $meta_id ) {
global $wpdb;
// Проверяем корректность входных данных
if ( ! $meta_type || ! is_numeric( $meta_id ) || floor( $meta_id ) != $meta_id ) {
return false;
}
$meta_id = (int) $meta_id;
if ( $meta_id <= 0 ) {
return false;
}
$table = _get_meta_table( $meta_type );
if ( ! $table ) {
return false;
}
// Столбцы объекта и ID
$column = sanitize_key( $meta_type . '_id' );
$id_column = ( 'user' === $meta_type ) ? 'umeta_id' : 'meta_id';
// Хук для проверки возможности удален��я метаданных
$check = apply_filters( "delete_{$meta_type}_metadata_by_mid", null, $meta_id );
if ( null !== $check ) {
return (bool) $check;
}
// Находим метаданные по ID
$meta = get_metadata_by_mid( $meta_type, $meta_id );
if ( $meta ) {
$object_id = (int) $meta->{$column};
// Генерируем событие перед удалением
do_action( "delete_{$meta_type}_meta", (array) $meta_id, $object_id, $meta->meta_key, $meta->meta_value );
// Выполняем удаление метаданных
$result = (bool) $wpdb->delete( $table, array( $id_column => $meta_id ) );
// Очищаем кэш
wp_cache_delete( $object_id, $meta_type . '_meta' );
// Генерируем событие после удаления
do_action( "deleted_{$meta_type}_meta", (array) $meta_id, $object_id, $meta->meta_key, $meta->meta_value );
return $result;
}
// Если мета ID не найден
return false;
}
Связанные функции
add_metadata()delete_metadata()get_metadata()is_protected_meta()register_meta()sanitize_meta()update_metadata()