Come memorizzare più valori di input con lo stesso meta_key in WordPress
Esiste un modo per memorizzare il valore di input da più campi di meta box personalizzati con lo stesso meta_key
?
Utilizzo il seguente codice per memorizzare UN valore per il meta_key
'startdate':
function startdate() {
global $post;
$custom = get_post_custom($post->ID);
$startdate = $custom["startdate"][0];
?>
<label>Data di inizio</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"]);
}
Se avessi un secondo campo di input, come posso memorizzare il suo valore con un diverso meta_id
ma lo stesso meta_key
(startdate)? Grazie mille!
(Se uso la funzionalità incorporata dei campi personalizzati posso salvare più valori per la stessa meta key...)
Modifica il tuo modulo come suggerito:
function startdate() {
global $post;
$custom = get_post_custom($post->ID);
echo "<label>Date di inizio</label><br/>";
for ($i=0; $i<count($custom["startdate"]);$i++) {
echo "<input type=\"text\" name=\"startdate[".$i."]\" value=\"".$custom["startdate"][$i]."\" />";
}
}
Dovrai rimuovere e reimpostare le tue singole voci di 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);
}
}
}
Poi, naturalmente, dovrai aggiungere qualche meccanismo di aggiunta/rimozione al tuo modulo metabox, probabilmente tramite JS.

Wow, ci siamo quasi! Ho due problemi: (1) Quando creo un nuovo post (evento) ricevo un avviso nell'area di modifica: "Warning: Invalid argument supplied for foreach()". Quando inserisco le date nel form e salvo il post, i valori vengono memorizzati correttamente come singole entry postmeta (li vedo nel db) e l'avviso scompare. Ma (2) al ricaricamento i meta_values non vengono impostati come valori degli input, quindi i campi del form appaiono vuoti. Hai qualche idea per risolvere questi problemi? Grazie mille!

@Christoph: Scusa, è stata una svista da parte mia. Primo, wp_is_post_revision()
richiede l'id del post come parametro, poi non ho impostato correttamente l'attributo value degli input nella parte del form, e infine ho aggiunto alcuni controlli di base alla funzione di aggiornamento. Vedi le modifiche.

Come menzionato da t31os prova a modificare gli input del tuo form per utilizzare name="startdate[]"
poi scorri l'array salvando ogni valore:
foreach ($_POST["startdate"] as $datevalue) {
update_post_meta($post->ID, "startdate", $datevalue);
}
