2013-02-14 54 views
1

我已經添加了更多字段給用戶信息,但現在我正在努力保存一組值。用update_user_meta保存數組

我如何顯示值:

<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']); 

我知道我做錯了,但我不能找到正確的方法去做吧。我希望這裏有人能幫助我。

回答

2

變化name="days"name="days[]"所有輸入字段和使用

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

你會被存儲與依靠,如果這些字段進行了檢查或者不真/假值的數值數組。

要設置複選框的預設值,您不能簡單地將其值設置爲您所期望的值。正確的屬性是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處理它們。希望這可以是一個開始,但互聯網上有更多的材料。

+0

謝謝!這對我來說很清楚。 – 2013-02-14 15:52:02