Как сохранить массив с одним meta-ключом в postmeta?
У меня есть массив, сохраненный в postmeta, где каждый ключ массива становится meta-ключом. Я хочу изменить код, чтобы сохранить весь массив с одним meta-ключом. Как это сделать? Спасибо!
$poddata = Array(
'pod_id' => $this->pod_id,
'url' => $this->url,
'name' => $this->name,
'description' => $this->description,
'service' => $this->service,
'status' =>$this->status,
'price' => $this->price
);
// Перебираем каждый элемент массива
foreach ( $poddata as $k => $v ){
if ( get_post_meta( $this->id, $k ) == '' )
add_post_meta( $this->id, $meta_box, $v, true );
elseif ( $v != get_post_meta( $this->id, $k, true ) )
update_post_meta( $this->id, $k, $v );
elseif ( $v == '' )
delete_post_meta( $this->id, $k, get_post_meta( $this->id, $k, true ) );
}

Вам не нужно перебирать значения в цикле. Просто используйте update_post_meta($post_ID, {ключ}, {массив значений})
, этого достаточно!
<?php
$poddata = Array(
'pod_id' => $this->pod_id,
'url' => $this->url,
'name' => $this->name,
'description' => $this->description,
'service' => $this->service,
'status' =>$this->status,
'price' => $this->price
);
//Функция update_post_meta добавляет новую запись, если она не существует, или обновляет существующую
update_post_meta($post_ID, 'poddata', $poddata);
?>
Вот и всё! Когда вам нужно получить эти данные для использования, сделайте следующее:
$poddata = get_post_meta($post_ID, 'poddata');
$poddata - это массив значений.

Я попробовал update_post_meta($post_ID, 'poddata', $postdata), после сохранения поста метаданные не сохранились.

Ой, извините, они сохранились, я просто не увидел их в таблице WP Custom Fields. Обнаружил только в phpAdmin. Спасибо!

При получении данных через get_post_meta($post_ID, 'poddata'); var_dump возвращает array(0). Как получить весь массив?

Пожалуйста! Попробуйте использовать print_r()... echo "<pre>"; print_r($poddata); echo "</pre>";

Ох... значит значения не сохраняются. Вы получаете пустой массив. Я проверил пример локально, и он работал нормально. Попробуйте вывести print_r массива значений перед вызовом update_post_meta. Скорее всего, он не получает никаких значений.

Оно сохранено, я вижу это в phpAdmin, новые записи имеют метаполе "pod" и значение в виде массива. Просто не могу его получить.

Дженни, попробуй и это решение тоже.
@Bainternet Я намеренно пропустил третий параметр, который является флагом 'single', так как метазначение в get_post_meta - это массив. Обязательно ли его указывать при работе с массивами вместо строковых метазначений? Я использую его только когда храню строки в качестве метазначений.

Третий параметр "true" следует пропускать, если у вас несколько полей с одинаковым именем. Его значение может быть строкой, булевым, целым числом или массивом, но не в этом суть данного параметра.

Спасибо! Теперь я четко понимаю, для чего нужен параметр 'true'!

Он обновляет или вставляет. Но удаляет ли он элементы, которых нет в новом массиве?
