Удаление метаданных поста в 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. Используя приведенные примеры, вы сможете легко управлять нужными вам данными. Не стесняйтесь экспериментировать с кодом, чтобы добиться желаемых результатов!