Cómo almacenar múltiples valores de entrada con el mismo meta_key
¿Existe alguna forma de almacenar el valor de entrada de múltiples campos de metabox personalizados con el mismo meta_key
?
Utilizo el siguiente código para almacenar UN valor para el meta_key
'startdate':
function startdate() {
global $post;
$custom = get_post_custom($post->ID);
$startdate = $custom["startdate"][0];
?>
<label>Fecha de inicio</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"]);
}
Si tuviera un segundo campo de entrada, ¿cómo puedo almacenar su valor con un meta_id
diferente pero el mismo meta_key
(startdate)? ¡Muchas gracias!
(Si uso la funcionalidad incorporada de campos personalizados puedo guardar múltiples valores para la misma meta clave...)

Cambia tu formulario como se sugiere:
function startdate() {
global $post;
$custom = get_post_custom($post->ID);
echo "<label>Fechas de inicio</label><br/>";
for ($i=0; $i<count($custom["startdate"]);$i++) {
echo "<input type=\"text\" name=\"startdate[".$i."]\" value=\"".$custom["startdate"][$i]."\" />";
}
}
Tendrás que eliminar y restablecer tus entradas individuales de 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);
}
}
}
Luego, por supuesto, necesitarás agregar algún mecanismo de agregar/eliminar a tu formulario de metabox, probablemente mediante JS.

¡Guau, casi llegamos! Tengo dos problemas: (1) Cuando creo una nueva publicación (evento), aparece una advertencia en el área de edición: "Warning: Invalid argument supplied for foreach()". Cuando ingreso fechas en el formulario y guardo la publicación, los valores se almacenan correctamente como entradas individuales de postmeta (los veo en la base de datos) y la advertencia desaparece. Pero (2) al recargar, los meta_values no se establecen como valores en los inputs del formulario, por lo que los campos aparecen vacíos. ¿Alguna idea de cómo resolver estos problemas? ¡Muchas gracias!

@Christoph: Lo siento, fue un error tonto de mi parte. Primero, wp_is_post_revision()
toma el ID de la publicación como parámetro. Luego, no ajusté correctamente el atributo value de los inputs en la parte del formulario. Finalmente, ahora agregué algunas comprobaciones básicas a la función de actualización. Mira los cambios.

Como mencionó t31os, intenta cambiar los inputs de tu formulario para usar name="startdate[]"
y luego recorre el array guardando cada valor:
foreach ($_POST["startdate"] as $datevalue) {
update_post_meta($post->ID, "startdate", $datevalue);
}
