3

ユーザー情報にフィールドを追加しましたが、値の配列を保存するのに苦労しています。

値の表示方法:

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

私はそれを間違っていることを知っていますが、それを行う正しい方法を見つけることができません。ここの誰かが私を助けてくれることを願っています。

4

1 に答える 1

4

すべての入力フィールドをに変更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; ?

しかし実際には、あなたの場合、フィールド名に配列を使用するのは不器用です。各フィールドに「monday」、「tuesday」などの名前を付け$_POST['monday']、たとえばで値を取得してから、を格納するだけarray( 'monday' => $_POST['monday'], ... )です。name='days[]'これをデータベースに追加するとname="<?php echo $day; ?>"'、foreachループでに置き換えることができます。

get_user_meta代わりに使用していることに注意してくださいget_author_meta-それらは互換性がありません!

Wordpress APIはあなたにとって小さなハードルかもしれませんが、あなたが本当に勉強する必要があるのは、フォームを作成する方法と、PHPでそれらを処理する方法だけだと思います。これが出発点になることを願っていますが、インターネットにはもっとたくさんの資料があります。

于 2013-02-14T11:25:50.023 に答える