it-swarm.com.de

So speichern Sie mehrere Optionen aus einem Dropdown-Menü im Benutzerprofil

Ich verwende diesen Code, um das Dropdown-Menü zu erstellen und dann die ausgewählten Dropdown-Werte zu speichern:

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

Aber natürlich wird nur ein Wert gespeichert, da ich die ausgewählten Werte der Dropdown-Liste in einem Array speichern muss. Aber ich weiß nicht, wie ich das machen soll.

Kann jemand bitte das Wissen teilen?

1
Ami

Sie benötigen ein öffnendes Select-Tag, das PHP angibt, dass es sich um ein Array handelt. Etwas in der folgenden Richtung sollte Sie auf den Weg bringen ...

<?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

Der Code aus der obigen Antwort wurde geändert, sodass die Mehrfachauswahl beim Anzeigen des Benutzerprofils korrekt angezeigt wird. Außerdem wurde das Attribut "multiple" zur Auswahl selbst hinzugefügt.

<?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