Found a solution, although you have to change your premise a bit.
- Really can not add more than one metabox that uses a common draw and save callback.
- The names have to unique for the fields, just like in standard form processing.
So what I did it this 1 metabox, with my variation of repeatable fields.
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);
}
}
}
To add a new record and save the present ones, I have added a old-style HTML submit button. This button passing nothing force the save & redraw routine. No data is passed.
This is just test code. It demonstrates the following:
- How to dynamically add same fields to a meta box
- How to ensure that these new fields have unique names
- How to retrieve the data from these fields
And there ya go for repeatable fields within a metabox, without all the other overhead. So unless someone can explain to me why this solution is problem..I am going for it. What I like is that it is small and tight code, using the database as a simulated variable. The only heavy use, is hitting the database, however since this is for the admin section of WordPress, it really does not matter.