delete_post_meta()
Удалят все произвольные поля (метаполя) с указанным ключом у указанной записи (поста).
Используйте delete_post_meta_by_key(), чтобы удалить мета-поля по ключу, у всех постов.
Хуков нет.
Возвращает
true|false
. true при успешном удалении, false в противном случае.
Использование
delete_post_meta( $post_id, $key, $value );
- $post_id(число) (обязательный)
- ID поста, произвольные поля которого нужно удалить.
- $key(строка) (обязательный)
- Ключ произвольного поля, которое нужно удалить.
- $value(строка)
- Значения произвольного поля, которое нужно удалить. Указание этого параметра может пригодится, когда у поста имеются несколько произвольных полей с одинаковыми ключами. Если оставить поле пустым, то все произвольные поля с указанным ключом будут удалены.
По умолчанию: ''
Примеры
#1 Демонстрация удаления метаполей
// удалим все произвольные поля с ключом `my_key`, у поста 76 delete_post_meta( 76, 'my_key' ); // удалим все произвольные поля `my_key` со значением `Steve`: delete_post_meta( 76, 'my_key', 'Steve' );
#2 Удаление указанных метаполей (произвольных полей)
Предположим, что мы использовали плагин, который добавлял произвольные поля к каждому посту, а теперь мы от этого плагина отказались и нам нужно удалить все произвольные поля, которые были созданы этим плагином.
Плагин создавал поля с ключами: keys 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' ); }
#3 Удаление произвольных полей с исключениями
Допустим, нужно удались все произвольные поля 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 ); } }
#4 Пример удаления всех метаполей у определенного поста
Вариант 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 );
#5 Другие примеры
Еще примеры смотрите здесь.
Список изменений
С версии 1.5.0 | Введена. |
Код delete_post_meta() delete post meta WP 6.7.1
function delete_post_meta( $post_id, $meta_key, $meta_value = '' ) { // Make sure meta is deleted from the post, not from a revision. $the_post = wp_is_post_revision( $post_id ); if ( $the_post ) { $post_id = $the_post; } return delete_metadata( 'post', $post_id, $meta_key, $meta_value ); }