Удаление метаданных поста в WordPress: DELETE_POST_META() – руководство

Удаление метаданных поста в WordPress с помощью функции DELETE_POST_META()

Что такое DELETE_POST_META()?

DELETE_POST_META() — это функция WordPress, которая позволяет удалять метаданные (дополнительные данные) у постов. Мы можем удалять данные по ключу, а также по ключу и значению. Если вам нужно удалить все данные с определенным ключом, вы можете сделать это легко.

Как работает функция?

Использует: delete_metadata()

Применяется в:

  • update_attached_file()
  • set_post_thumbnail()
  • wp_update_attachment_metadata()

Возвращаемое значение

Функция возвращает true, если удаление прошло успешно, и false, если произошла ошибка.

Использование функции

delete_post_meta( $post_id, $meta_key, $meta_value );

Параметры

  • $post_id (int, обязательный) — ID поста, из которого нужно удалить метаданные.
  • $meta_key (string, обязательный) — название метаданных.
  • $meta_value (mixed) — значение метаданных. Если указано, будут удалены только те строки, которые совпадают с этим зна��ением. Если значение не является простым, оно должно быть сериализуемым.
    • По умолчанию: '' (пустая строка).

Примеры использования

Пример 1: Удаление определенных метаполей

Допустим, у вас есть плагин, который добавляет пользовательские поля к каждому посту, и вы решили удалить их. Плагин создал поля с ключами related_posts и post_inspiration.

Чтобы удалить все эти пользовательские поля, используйте следующий код:

$allposts = get_posts( 'numberposts=-1&post_type=post&post_status=any' );

foreach( $allposts as $postinfo) {
    delete_post_meta( $postinfo->ID, 'related_posts' );
    delete_post_meta( $postinfo->ID, 'post_inspiration' );
}

Пример 2: Удаление с исключениями

Если вы хотите удалить все пользовательские поля post_inspiration, кроме тех, у которых значение равно Sherlock Holmes, используйте следующий код:

$allposts = get_posts( 'numberposts=-1&post_type=post&post_status=any' );

foreach( $allposts as $postinfo ) {
    $inspiration = get_post_meta( $postinfo->ID, 'post_inspiration' );

    foreach( $inspiration as $value ) {
        if( $value != 'Sherlock Holmes' ){
            delete_post_meta( $postinfo->ID, 'post_inspiration', $value );
        }
    }
}

Пример 3: Удаление всех метаполей в определенном посте

Есть два способа удалить метаполя из конкретного поста. Рассмотрим оба:

Вариант 1:

$post_id = 25;
foreach ( get_post_meta( $post_id ) as $key => $val ) {
    delete_post_meta( $post_id, $key );
}

Вариант 2 (быстрее):

$post_id = 25;
global $wpdb;
$wpdb->delete( $wpdb->postmeta, [ 'post_id' => $post_id ] );
clean_post_cache( $post_id );

Пример 4: Удаление всех метаполей по имени ключа

Предположим, вы хотите удалить все метаполя, которые добавил плагин с именами related_posts и post_inspiration. Используйте следующую функцию в процессе деинсталляции плагина:

delete_post_meta_by_key( 'related_posts' ); 
delete_post_meta_by_key( 'post_inspiration' );

Пример 5: Демонстрация удаления метаполей

// Удаляем все пользовательские поля с ключом my_key для поста с ID 76
delete_post_meta( 76, 'my_key' );

// Удаляем все пользовательские поля my_key со значением Steve:
delete_post_meta( 76, 'my_key', 'Steve' );

Обновления

Функция была введена в версии 1.5.0 и периодически обновляется в новых версиях WordPress.

Заключение

Функция delete_post_meta() является мощным инструментом для управления метаданными постов в WordPress. Используя приведенные примеры, вы сможете легко управлять нужными вам данными. Не стесняйтесь экспериментировать с кодом, чтобы добиться желаемых результатов!

Leave a Reply

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