从输入字段生成数组问题

时间:2013-09-12 作者:Efrain

我有一系列输入字段集:

<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标记。再次感谢你的帮助。

2 个回复
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].

SO网友:Anjum

从表单字段创建数组$_POST[\'people\'] 数据使用foreach循环获取和创建$_POST[\'people\'] 然后将数据数组保存在post meta字段中,这样做

foreach ($_POST[\'people\'] as $key => $value) {
    $peoples[$key] = $value;
}

update_post_meta($post_id, \'peoples\', $peoples);

结束

相关推荐

Meta value Array

我希望有人能帮助我。我创建了一个自定义元框并尝试存储一个数组,但在使用update_post_meta, 它似乎没有将其存储为数组。我通过api获取信息,从文本区域到update_post_meta.我试过了serialize, unserialize, maybe_serialize, maybe_unserialize 等等,这是我的代码。$movieCast(array) array ( 0 => array ( \'actor\