Comment stocker des valeurs d'entrée multiples avec la même meta_key
Question
est-il un moyen de stocker la valeur d'entrée provenant de plusieurs champs de la boîte de méta personnalisée avec le même meta_key
?
J'utilise le code suivant pour stocker une valeur pour la meta_key
« startdate »:
function startdate() {
global $post;
$custom = get_post_custom($post->ID);
$startdate = $custom["startdate"][0];
?>
<label>Startdate</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 j'avais un deuxième champ d'entrée, comment puis-je conserver sa valeur avec un autre meta_id
mais le même meta_key
(startdate)? Merci beaucoup!
(Si j'utilise la fonctionnalité intégrée dans le champ personnalisé que je peux enregistrer plusieurs valeurs pour la même clé de méta ...)
La solution
Modifier votre formulaire comme le suggère:
function startdate() {
global $post;
$custom = get_post_custom($post->ID);
echo "<label>Startdates</label><br/>";
for ($i=0; $i<count($custom["startdate"]);$i++) {
echo "<input type=\"text\" name=\"startdate[".$i."]\" value=\"".$custom["startdate"][$i]."\" />";
}
}
Vous devrez supprimer et de rétablir vos entrées individuelles 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);
}
}
}
Alors, bien sûr, vous aurez besoin d'ajouter une sorte d'ajouter / supprimer mécanisme à votre formulaire METABOX, probablement par JS.
Autres conseils
Comme mentionné par t31os essayez de changer vos entrées de formulaire à utiliser name="startdate[]"
boucle puis à travers le réseau d'économie chaque valeur:
foreach ($_POST["startdate"] as $datevalue) {
update_post_meta($post->ID, "startdate", $datevalue);
}