Как сохранить массив с одним meta-ключом в postmeta?

6 авг. 2011 г., 10:47:28
Просмотры: 46.3K
Голосов: 20

У меня есть массив, сохраненный в 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 ) );

}
0
Все ответы на вопрос 1
14
32

Вам не нужно перебирать значения в цикле. Просто используйте 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 - это массив значений.

6 авг. 2011 г. 11:46:23
Комментарии

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

Jenny Jenny
6 авг. 2011 г. 11:49:40

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

Jenny Jenny
6 авг. 2011 г. 11:59:04

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

Jenny Jenny
6 авг. 2011 г. 12:28:26

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

Rutwick Gangurde Rutwick Gangurde
6 авг. 2011 г. 12:30:21

print_r($poddata) показывает Array()

Jenny Jenny
6 авг. 2011 г. 12:47:40

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

Rutwick Gangurde Rutwick Gangurde
6 авг. 2011 г. 12:55:37

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

Jenny Jenny
6 авг. 2011 г. 13:02:44

Попробуй $poddata = get_post_meta($post_ID, 'poddata',true);

Bainternet Bainternet
6 авг. 2011 г. 13:10:14

Дженни, попробуй и это решение тоже.

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

Rutwick Gangurde Rutwick Gangurde
6 авг. 2011 г. 13:17:30

Отлично!!! Параметр "true" сработал! Спасибо!!!

Jenny Jenny
6 авг. 2011 г. 13:25:01

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

Bainternet Bainternet
6 авг. 2011 г. 14:48:31

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

Rutwick Gangurde Rutwick Gangurde
6 авг. 2011 г. 15:28:37

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

Peter Westerlund Peter Westerlund
28 янв. 2023 г. 20:37:09

Вы можете использовать json_encode() или serialize(), чтобы увидеть это в пользовательских полях на странице редактирования, наверное. Но потом вам придется декодировать это при дальнейшем использовании.

dw1 dw1
31 окт. 2024 г. 14:52:21
Показать остальные 9 комментариев