我有一系列输入字段集:
<input type="text" name="people[name]" />
<input type="text" name="people[lastname]" />
<input type="text" name="people[email]" />
<input type="text" name="people[name]" />
<input type="text" name="people[lastname]" />
<input type="text" name="people[email]" />
...
我正在寻找一种将值存储为如下数组的方法
{ people: { name: xxx , lastname: yyy, email: zzz },
{ name: xxx , lastname: yyy, email: zzz },
{ name: xxx , lastname: yyy, email: zzz },
...
}
我将使用update\\u post\\u meta();保存值。
谢谢你的帮助。
编辑
// CALLBACK
<?php
function show_people_box($post){
$metas = json_decode(get_post_meta($post->ID,\'people\',true));
?>
<?php
$hiterms = get_terms(\'people\', array(\'orderby\' => \'slug\', \'parent\' => 0, \'hide_empty\' =>false));
?>
<?php foreach($hiterms as $key => $hiterm) { ?>
<h2 style="text-align:center;"><?php echo $hiterm->name; ?></h2>
<table width="100%">
<?php
$args = array(
\'post_type\'=>\'people\',
\'orderby\' => \'menu_order\',
\'post_parent\' => 0,
\'tax_query\' => array(array(
\'taxonomy\' => \'people\',
\'field\' => \'id\',
\'terms\' => $hiterm->term_id
)));
?>
<?php
$query = new WP_Query($args);
while($query->have_posts()){
$query->the_post();
?>
<?php
$children = get_children(array(\'post_type\' => \'people\', \'post_parent\' => get_the_ID() ));
if($children) {
?>
<tr>
<td><input name="people[name]" type="text" /></td>
<td><input name="people[lastname]" type="text" /></td>
<td><input name="people[email]" type="text" /></td>
</tr>
<?php
$args_2 = array( \'post_type\'=>\'people\',\'post_parent\' => get_the_ID() );
$query_2 = new WP_Query($args_2);
while($query_2->have_posts()){
$query_2->the_post();
?>
<tr>
<td><input name="people[name]" type="text" /></td>
<td><input name="people[lastname]" type="text" /></td>
<td><input name="people[email]" type="text" /></td>
</tr>
<?php
}
} else {
?>
<tr>
<td><input name="people[name]" type="text" /></td>
<td><input name="people[lastname]" type="text" /></td>
<td><input name="people[email]" type="text" /></td>
</tr>
<?php
}
?>
<?php
} wp_reset_postdata();
?>
</table>
<?php } ?>
<?php
}
// SAVE
add_action( \'save_post\', \'save_people_box\' );
function save_people_box(){
foreach($_POST[\'people\'] as $key => $value){
$peoples[$key] = $value;
}
global $post;
update_post_meta( $post->ID, \'people\', json_encode($peoples) );
}
我希望这能有所帮助,为了简化我的问题,我删除了一些html标记。再次感谢你的帮助。
SO网友:NateWr
如果命名了两个字段people[name]
, 只有最后一个值将与表单一起发送。为了完全可靠,您需要为每个收集详细信息的人使用id:
<input name="people[0][name]">
<input name="people[0][email]">
<input name="people[1][name]">
<input name="people[1][email]">
...
在while循环中使用递增计数器来执行此操作(
$i
):
<?php
$i = 0;
while ( $posts->have_posts() ) {
...
?>
<input name="people[<?php echo $i; ?>][name]">
<?php
$i++;
endwhile;
?>
可以使用空数组键格式(
[]
) 仅当不需要将其他字段链接在一起时。
<input name="people[name][]" type="text">
您将只接收非空字段值,因此空字段将被抛出,数组键将被弄乱。考虑以下情况:
<input name="people[name][]">
<input name="people[email][]">
<input name="people[name][]">
<input name="people[email][]">
如果用户仅填写第二个名称字段,则第二个名称的数组键为
0
. 你无法将第二个名字链接到第二封电子邮件。
在以下情况下:
<input name="people[][name]">
<input name="people[][email]">
每个新的命名字段都将在索引中指定一个唯一的键,因此电子邮件字段将位于
$_POST[1][email]
.