使用update_user_meta保存数组

时间:2013-02-14 10:20:39

标签: arrays wordpress

我在用户信息中添加了更多字段,但现在我正在努力保存一组值。

我如何显示值:

<tr>
    <th><label for="days">days</label></th>
    <td>
        <input type="checkbox" name="days" value="<?php echo esc_attr( get_the_author_meta( 'monday', $user->ID ) ); ?>"> Monday<br>
        <input type="checkbox" name="days" value="<?php echo esc_attr( get_the_author_meta( 'tuesday', $user->ID ) ); ?>"> Tuesday<br>
        <input type="checkbox" name="days" value="<?php echo esc_attr( get_the_author_meta( 'wednesday', $user->ID ) ); ?>"> Wednesday<br>
        <input type="checkbox" name="days" value="<?php echo esc_attr( get_the_author_meta( 'thursday', $user->ID ) ); ?>"> Thursday<br>
        <input type="checkbox" name="days" value="<?php echo esc_attr( get_the_author_meta( 'friday', $user->ID ) ); ?>"> Friday<br>
    </td>
</tr>

我如何保存这些值:

update_user_meta($user_id, 'days', $_POST['monday, tuesday, wednesday, thursday, friday']); 

我知道我做错了,但我找不到合适的方法。我希望有人可以帮助我。

1 个答案:

答案 0 :(得分:2)

将所有输入字段的name="days"更改为name="days[]"并使用

update_user_meta( $user_id, 'days', $_POST['days'] );

您将存储具有true / false值的数值数组,具体取决于是否检查了这些字段。

要设置预先设置复选框的值,您不能简单地将其值设置为您想要的值。这样做的正确属性是checked="checked"。这是一个如何完整地解决这个问题的例子:

$values = array_combine( array( 'monday', 'tuesday', 'wednesday', 'thursday', 'friday' ), $_POST['days'] );
update_user_meta( $user_id, 'days', $values );

显示:

<?php 
$days = get_user_meta( $user_id, 'days', true );
foreach( $days as $day => $checked ):
?>
<input type="checkbox" name="days[]" <?php if( $checked ) echo 'checked="checked"'; ?>>
<?php endforeach; ?

但事实上,在你的情况下,使用数组作为字段名称只是笨拙。您可以将每个字段命名为“星期一”,“星期二”等,例如,使用$_POST['monday']检索值,然后存储array( 'monday' => $_POST['monday'], ... )。在数据库中使用此功能,您可以在foreach循环中将name='days[]'替换为name="<?php echo $day; ?>"'

注意我使用的是get_user_meta而不是get_author_meta - 它们不可互换!

Wordpress API对您来说可能是一个小障碍,但我认为您真正需要研究的是如何构建表单以及如何使用PHP处理它们。希望这可以是一个开始,但互联网上有更多的材料。