Удаление метаданных по ID в WordPress: функция DELETE_METADATA_BY_MID()

## 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()

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *