您的MD数组在思维上有点问题,应该是这样的,否则您将覆盖表单中的数据:
["mainStageSatOrder"]=> array(2) {
[0]=> array(1) {
["theband"]=> array(2) {
["theid"]=> int(1)
["theorder"]=> int(5)
}
}
[1]=> array(1) {
["theband"]=> array(2) {
["theid"]=> int(2)
["theorder"]=> int(8)
}
}
}
现在您有了两个选项(我推荐选项B,因为您可能不需要没有上下文的单个元数据)
Option A: 将数据保存在单个元字段中。您将需要parent\\u密钥($key
或\'mainStageSatOrder\'
), $row_id
和field\\u id($sub_key
或$key
) 获取您的数据。
function save($post_id) {
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
return;
if ( !current_user_can( \'edit_post\', $post_id ) || !array_key_exists(\'mainStageSatOrder\', $_POST) )
return;
foreach ($_POST[\'mainStageSatOrder\'] as $row_id => $rows) {
foreach ($rows as $key => $value) {
if (is_array($value)) {
foreach ($value as $sub_key => $sub_value) {
$meta_key = \'_\'.$key.\'_\'.$row_id.\'_\'.$sub_key;
update_post_meta($post_id, $meta_key, $sub_value);
}
} else {
$meta_key = "_mainStageSatOrder_".$row_id."_".$key;
update_post_meta($post_id, $meta_key, $value);
}
}
}
update_post_meta($post_id, \'_mainStageSatOrder\', array_keys($_POST[\'mainStageSatOrder\']));
}
Option B: 将数据保存在序列化数组中(WordPress处理序列化)。要再次访问和处理阵列,只需
unserialize()
meta\\u值。
function save_array($post_id) {
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
return;
if ( !current_user_can( \'edit_post\', $post_id ) || !array_key_exists(\'mainStageSatOrder\', $_POST) )
return;
update_post_meta($post_id, \'_mainStageSatOrder\', $_POST[\'mainStageSatOrder\']);
}
PHP代码中的某个地方:
$mainStageSatOrder = unserialize(
get_post_meta(
get_the_ID(),
\'_mainStageSatOrder\',
true
)
);