web-dev-qa-db-ja.com

ユーザープロファイルのドロップダウンから複数のオプションを保存する方法

このコードを使用してドロップダウンを作成し、選択したドロップダウンの値を保存します。

<?php
// Display Fields 
add_action( 'show_user_profile', 'add_multiple_choice_dropdown ' );
add_action( 'edit_user_profile', 'add_multiple_choice_dropdown ' );

function add_multiple_choice_dropdown ( $user ) {
?>

<h3>Extra profile information</h3>

<table class="form-table"> 
<tr>
    <th><label for="multi_dropdown">The dropdown with multiple choices</label></th>
    <td>
        <?php 
        //get dropdown saved value
        $selected = esc_attr(get_user_meta( $user->ID, 'multi_dropdown', true )); 
        ?>
    <select name="multi_dropdown" id="multi_dropdown" multiple>
            <option value="first_choice" <?php echo ($selected == "first_choice")?  'selected="selected"' : '' ?>>First Choice</option>
            <option value="second_choice" <?php echo ($selected == "second_choice")?  'selected="selected"' : '' ?>>Second Choice</option>
            <option value="third_choice" <?php echo ($selected == "third_choice")?  'selected="selected"' : '' ?>>Third Choice</option>
    </select>
    <p class="description">Choose from the options above.</p>
    </td>
</tr>
</table>

<?php
}

// Save fields
add_action( 'personal_options_update', 'save_multiple_choices' );
add_action( 'edit_user_profile_update', 'save_multiple_choices' );

function save_multiple_choices( $user_id )
{
if ( isset( $_POST['multi_dropdown'] ) ) {
update_user_meta( $user_id, 'multi_dropdown', $_POST['multi_dropdown'] );
}
?>

ただし、ドロップダウンの選択された値を配列に保存する必要があると思いますので、もちろん1つの値しか保存されません。しかし、私はこれを行う方法がわからない。

誰かが知識を共有してもらえますか?

1
Ami

あなたはPHPそれが配列であることを伝える最初のselectタグが必要になるでしょう。次の行に沿って何かがあなたの方法にあなたを取得する必要があります...

<?php
// Display Fields 
add_action( 'show_user_profile', 'add_multiple_choice_dropdown ' );
add_action( 'edit_user_profile', 'add_multiple_choice_dropdown ' );

function add_multiple_choice_dropdown ( $user ) {
    $current_selections = get_user_meta( $user->ID, 'multi_dropdown', true );
?>

<h3>Extra profile information</h3>

<table class="form-table"> 
<tr>
<th><label for="multi_dropdown" multiple="multiple">The dropdown with multiple choices</label></th>
<td>
<select name="multi_dropdown[]">
        <option value="first_choice" <?php echo ( !empty( $current_selections ) && in_array( 'first_choice', $current_selections ) ? ' selected="selected"' : '' ) ?>>First Choice</option>
        <option value="second_choice" <?php echo ( !empty( $current_selections ) && in_array( 'second_choice', $current_selections ) ? ' selected="selected"' : '' ) ?>>Second Choice</option>
        <option value="third_choice" <?php echo ( !empty( $current_selections ) && in_array( 'second_choice', $current_selections ) ? ' selected="selected"' : '' ) ?>>Third Choice</option>
</select>
<p class="description">Choose from the options above.</p>
</td>
</tr>
</table>

<?php
}

// Save fields
add_action( 'personal_options_update', 'save_multiple_choices' );
add_action( 'edit_user_profile_update', 'save_multiple_choices' );

function save_multiple_choices( $user_id )    {
    if ( isset( $_POST['multi_dropdown'] ) ) {
        update_user_meta( $user_id, 'multi_dropdown', $_POST['multi_dropdown'] );
    }
}
?>
1
Mike

上記の回答のコードを修正して、ユーザープロファイルを表示するときに行われた複数の選択を正しく表示するようにしたほか、選択自体に "multiple"属性を追加しました。

<?php
// Display Fields 
add_action( 'show_user_profile', 'add_multiple_choice_dropdown ' );
add_action( 'edit_user_profile', 'add_multiple_choice_dropdown ' );

$current_selections = get_user_meta( $user->ID, 'multi_dropdown', true );
?>

<h3>Extra profile information</h3>

<table class="form-table"> 
<tr>
    <th><label for="multi_dropdown">The dropdown with multiple choices</label></th>
    <td>
        <select name="multi_dropdown[]" multiple>
            <option value="first_choice" <?php echo ( !empty( $current_selections ) && in_array( 'first_choice', $current_selections ) ? ' selected="selected"' : '' ) ?>>First Choice</option>
            <option value="second_choice" <?php echo ( !empty( $current_selections ) && in_array( 'second_choice', $current_selections ) ? ' selected="selected"' : '' ) ?>>Second Choice</option>
            <option value="third_choice" <?php echo ( !empty( $current_selections ) && in_array( 'second_choice', $current_selections ) ? ' selected="selected"' : '' ) ?>>Third Choice</option>
        </select>
        <p class="description">Choose from the options above.</p>
    </td>
</tr>
</table>

<?php
}

// Save fields
add_action( 'personal_options_update', 'save_multiple_choices' );
add_action( 'edit_user_profile_update', 'save_multiple_choices' );

function save_multiple_choices( $user_id )    {
    if ( isset( $_POST['multi_dropdown'] ) ) {
        update_user_meta( $user_id, 'multi_dropdown', $_POST['multi_dropdown'] );
    }
}
?>
0
contempoinc