同じmeta_key
を持つ複数のカスタムメタボックスフィールドからの入力値を格納する方法はありますか? meta_key
'startdate'に1つの値を格納するには、次のコードを使用します。
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"]);
}
2番目の入力フィールドがある場合、どのようにその値を異なるmeta_id
で同じmeta_key
(startdate)で保存することができますか?どうもありがとうございました!
(組み込みのカスタムフィールド機能を使用する場合は、同じメタキーに複数の値を保存できます...)
提案どおりにフォームを変更します。
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]."\" />";
}
}
個々の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を通じて、メタボックスフォームに何らかの追加/削除メカニズムを追加する必要があります。
t31os で述べたように、フォーム入力をname="startdate[]"
を使用するように変更してから、配列をループして各値を保存します。
foreach ($_POST["startdate"] as $datevalue) {
update_post_meta($post->ID, "startdate", $datevalue);
}