delete_post_meta() – удаляет значение мета-поля поста

Функция позволяет удалить значение мета-поля (произвольного поля) поста (записи, страницы или поста произвольного типа) с указанным ID.

Возвращает false, если ничего удалено не было (например метаданных с указанным ключом не существует), true – если удалось удалить мета-поле.

delete_post_meta( $post_id, $meta_key, $meta_value = '' )

Параметры

$post_id
(целое число) ID поста, мета-поле которого нужно удалить. Если передать в этот параметр ID редакции поста, то произвольное поле удалится именно у поста, которому эта редакция принадлежит.
$meta_key
(строка) Ключ (название) удаляемого мета-поля.
$meta_value
Как вы возможно знаете, произвольных полей с одним и тем же ключом может быть несколько. Поэтому в этом параметре вы можете указать определённое значение мета-поля, которое нужно удалить.

Примеры

1. Основы использования

Предположим, что у нас на сайте есть вот такие метаданные:

таблица wp-postmeta в pHpmyadmin

Попробуем поработать с ними?

// удаляем произвольное поле _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 );
}

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.