我已向用户信息添加了更多字段,但现在我正在努力保存一组值。
我如何显示值:
<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>
Run Code Online (Sandbox Code Playgroud)
我如何保存值:
update_user_meta($user_id, 'days', $_POST['monday, tuesday, wednesday, thursday, friday']);
Run Code Online (Sandbox Code Playgroud)
我知道我做错了,但我找不到正确的方法。我希望这里有人能帮助我。
更改name="days"为name="days[]"所有输入字段并使用
update_user_meta( $user_id, 'days', $_POST['days'] );
Run Code Online (Sandbox Code Playgroud)
您将存储一个带有真/假值的数字数组,具体取决于是否检查了这些字段。
要设置复选框的预设值,您不能简单地将其值设置为您想要的值。执行此操作的正确属性是checked="checked". 下面是一个完整的示例:
$values = array_combine( array( 'monday', 'tuesday', 'wednesday', 'thursday', 'friday' ), $_POST['days'] );
update_user_meta( $user_id, 'days', $values );
Run Code Online (Sandbox Code Playgroud)
用于显示:
<?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; ?
Run Code Online (Sandbox Code Playgroud)
但事实上,就您的情况而言,使用数组作为字段名称只是笨拙。您可以将每个字段命名为“星期一”、“星期二”等,$_POST['monday']例如检索值,然后存储array( 'monday' => $_POST['monday'], ... )。将其存储在数据库中后,您就可以在 foreach 循环中替换name='days[]'为。name="<?php echo $day; ?>"'
请注意,我使用的get_user_meta是get_author_meta- 它们不可互换!
Wordpress API 对你来说可能是一个小障碍,但我认为你真正需要学习的是如何构建表单以及如何使用 PHP 处理它们。希望这可以成为一个开始,但互联网上还有更多材料。