Как сохранить несколько значений input с одинаковым meta_key
Есть ли способ сохранить значения из нескольких полей пользовательских метабоксов с одинаковым meta_key
?
Я использую следующий код для сохранения ОДНОГО значения с meta_key
'startdate':
function startdate() {
global $post;
$custom = get_post_custom($post->ID);
$startdate = $custom["startdate"][0];
?>
<label>Дата начала</label><br/>
<input type="text" name="startdate" value="<?php echo $startdate; ?>"/>
<?php }
add_action('save_post', 'save_details');
function save_details(){
global $post;
update_post_meta($post->ID, "startdate", $_POST["startdate"]);
}
Если бы у меня было второе поле ввода, как я могу сохранить его значение с другим meta_id
, но тем же meta_key
(startdate)? Большое спасибо!
(Если использовать встроенную функциональность пользовательских полей, можно сохранить несколько значений для одного и того же meta ключа...)

Измените вашу форму, как предложено:
function startdate() {
global $post;
$custom = get_post_custom($post->ID);
echo "<label>Даты начала</label><br/>";
for ($i=0; $i<count($custom["startdate"]);$i++) {
echo "<input type=\"text\" name=\"startdate[".$i."]\" value=\"".$custom["startdate"][$i]."\" />";
}
}
Вам потребуется удалить и заново установить ваши индивидуальные записи postmeta:
add_action('save_post', 'save_details');
function save_details($post_id) {
if ($parent_id = wp_is_post_revision($post_id)) $post_id = $parent_id;
if (!empty($_POST['startdate']) && is_array($_POST['startdate'])) {
delete_post_meta($post_id, 'startdate');
foreach ($_POST['startdate'] as $startdate) {
add_post_meta($post_id, 'startdate', $startdate);
}
}
}
Затем, конечно, вам понадобится добавить какой-нибудь механизм добавления/удаления в форму метабокса, вероятно, через JS.

Ого, почти готово! У меня две проблемы: (1) Когда я создаю новую запись (событие), в области редактирования появляется предупреждение: "Warning: Invalid argument supplied for foreach()". Когда я ввожу даты в форму и сохраняю запись, значения корректно сохраняются как отдельные записи postmeta (я вижу их в базе данных), и предупреждение исчезает. Но (2) при перезагрузке значения meta_values не устанавливаются как значения полей формы, поэтому поля формы выглядят пустыми. Есть идеи, как решить эти проблемы? Большое спасибо!

Как упомянул t31os, попробуйте изменить ваши поля формы, чтобы использовать name="startdate[]"
, затем пройдитесь по массиву, сохраняя каждое значение:
foreach ($_POST["startdate"] as $datevalue) {
update_post_meta($post->ID, "startdate", $datevalue);
}
