找到了一个解决方案,尽管你必须稍微改变一下你的前提。
确实无法添加多个使用公共绘制和保存回调的元盒就像在标准表单处理中一样,字段的名称必须是唯一的所以我在这1个代谢箱中做了什么,用我的可重复字段的变化。
function add_manual_form()
{
add_meta_box( \'List_Group1\',
__( \'List Records\', \'myplugin_textdomain\' ),
\'TEST_card\',
\'mmdlist\',
\'normal\',
\'high\'
);
}
add_action( \'add_meta_boxes\', \'add_manual_form\' );
add_action( \'save_post\', \'save_TESTCARD\');
function TEST_card($post_ID, $Arg)
{
$RecordCnt = TotalRecordsInDatabase($post_ID);
$RecordCnt +=1;
for($i=1; $i<=$RecordCnt; $i ++)
DrawRecordSet($i);
?>
<form id="ADD_LIST_RECORD" name="ADD_LIST_RECORD" method="post" action="">
<input type="submit" name="ADD_LIST_RECORD" id="ADD_LIST_RECORD" value="ADD RECORD" />
</form>
<?php
}
function DrawRecordSet($Index)
{
?>
<select name="field1_<?php echo $Index; ?>">
<option value="">Select something...</option>
<option value="something">Something</option>
<option value="else">Else</option>
<option value="too">too</option>
</select>
<select name="field2_<?php echo $Index; ?>">
<option value="">Select something...</option>
<option value="stuff">1</option>
<option value="junk">Else</option>
<option value="too">too</option>
</select>
<br /><br /><br />
<?php
// Add a responsive button to add more record sets
}
function save_TESTCARD($post_ID)
{
for($i=1; $i<=3; $i ++)
{
if( array_key_exists( \'field1_\'.$i, $_POST ) )
{
$InputValue = $_POST[ \'field1_\'.$i ];
DebugLog(\'Field1_\'.$i.\': \'.$InputValue);
}
if( array_key_exists( \'field2_\'.$i, $_POST ) )
{
$InputValue = $_POST[ \'field2_\'.$i];
DebugLog(\'Field2_\'.$i.\': \'.$InputValue);
}
}
}
为了添加新记录并保存当前记录,我添加了一个老式的HTML提交按钮。此按钮不传递任何内容,将强制保存(&A);重画例程。未传递任何数据。
这只是测试代码。它演示了以下内容:
如何将相同字段动态添加到元框中如何确保这些新字段具有唯一的名称如何从这些字段中检索数据,以及如何在元框中找到可重复的字段,而无需所有其他开销。所以除非有人能向我解释为什么这个解决方案是个问题。。我会努力的。我喜欢的是它是小而紧凑的代码,使用数据库作为模拟变量。唯一重要的用途是访问数据库,但由于这是WordPress的管理部分,所以这真的不重要。