Функция позволяет удалить значение мета-поля (произвольного поля) поста (записи, страницы или поста произвольного типа) с указанным ID.
Возвращает false
, если ничего удалено не было (например метаданных с указанным ключом не существует), true
– если удалось удалить мета-поле.
delete_post_meta( $post_id, $meta_key, $meta_value = '' )
Параметры
- $post_id
- (целое число) ID поста, мета-поле которого нужно удалить. Если передать в этот параметр ID редакции поста, то произвольное поле удалится именно у поста, которому эта редакция принадлежит.
- $meta_key
- (строка) Ключ (название) удаляемого мета-поля.
- $meta_value
- Как вы возможно знаете, произвольных полей с одним и тем же ключом может быть несколько. Поэтому в этом параметре вы можете указать определённое значение мета-поля, которое нужно удалить.
Примеры
1. Основы использования
Предположим, что у нас на сайте есть вот такие метаданные:
Попробуем поработать с ними?
// удаляем произвольное поле _edit_lock delete_post_meta( 9987, '_edit_lock' ); // удаляем все мета-поля с ключом position delete_post_meta( 11, 'position' ); // удаляем только одно мета-поле с ключом position, значение которого unnormal delete_post_meta( 11, 'position', 'unnormal' );
2. Удаление мета-поля у всех постов
Чуть более интересный пример – воспользуемся функцией get_posts() вместе с delete_post_meta()
, чтобы удалить мета-поле с определённым ключом у всех записей типа page
.
$pages = get_posts( array( 'numberposts' => -1, 'post_type' => 'page' ) ); if( $pages ) { foreach( $pages as $page ) { delete_post_meta( $page->ID, 'not_true_key' ); } }
Похожее действие у функции delete_post_meta_by_key(), но она уже не будет чекать, какой тип у записей, а удалит всё из wp_postmeta
с указанным ключом. Удобно.
3. Удаление всех метаполей у одного поста
Ещё один пример – мы можем использовать delete_post_meta()
, чтобы удалить все (ну или почти все – как хотите) метаполя у определённого поста.
Для этого мы сначала получим все мета-поля функцией get_post_meta() и затем пройдёмся по ним в цикле.
$post_id = 31; $post_meta = get_post_meta( $post_id ); foreach ( $post_meta as $meta_key => $meta_value ) { // как вариант, можно сделать исключение для метаполей с ключами true_key1 и true_key2 if( in_array( $meta_key, array( 'true_key1', 'true_key2' ) ) { continue; // скипаем итерацию цикла для исключённых метаполей } delete_post_meta( $post_id, $meta_key ); }
Источник: Блог Миши Рудрастых