web-dev-qa-db-fra.com

Liste déroulante dans la page de profil de l'utilisateur

J'ai du mal à trouver une réponse à cette question. J'ai besoin d'un champ méta utilisateur personnalisé.

Je peux les créer, ce qui est correct, mais je dois créer un menu déroulant.

Par exemple, je veux que la méta de l'utilisateur soit le type d'unité et que les valeurs déroulantes soient résidentielles et commerciales.

Toute aide sur ce serait génial. Merci.

2
Fraggy

merci pour ça. Juste un tweak mineur, car le premier bit de code a généré une erreur. Vous trouverez ci-dessous le code de travail du premier bloc de code.

//hooks
add_action( 'show_user_profile', 'Add_user_fields' );
add_action( 'edit_user_profile', 'Add_user_fields' );

function Add_user_fields( $user ) { ?>

<h3>Extra fields</h3>
<table class="form-table">
    <tr>
        <th><label for="text">text</label></th>
        <td>
            <?php 
            // get test saved value
            $saved = esc_attr( get_the_author_meta( 'user_text', $user->ID ) );
            ?>
            <input type="text" name="user_text" id="user_text" value="<?php echo $saved; ?>" class="regular-text" /><br />
            <span class="description">Simple text field</span>
        </td>
    </tr>

    <tr>
        <th><label for="dropdown">dropdown Select field</label></th>
        <td>
            <?php 
            //get dropdown saved value
            $selected = get_the_author_meta( 'user_select', $user->ID ); //there was an extra ) here that was not needed 
            ?>
            <select name="user_select" id="user_select">
                <option value="value1" <?php echo ($selected == "value1")?  'selected="selected"' : '' ?>>Value One label</option>
                <option value="value2" <?php echo ($selected == "value2")?  'selected="selected"' : '' ?>>Value Two label</option>
</select>


            <span class="description">Simple text field</span>
        </td>
    </tr>
</table>

La deuxième partie est bien.

add_action( 'personal_options_update', 'save_user_fields' );
add_action( 'edit_user_profile_update', 'save_user_fields' );

function save_user_fields( $user_id ) {

if ( !current_user_can( 'edit_user', $user_id ) )
    return false;

//save text field
update_usermeta( $user_id, 'user_text', $_POST['user_text'] );

//save dropdown
update_usermeta( $user_id, 'user_select', $_POST['user_select'] );
}
3
Fraggy

Encore une fois, si vous savez comment ajouter un champ de texte, vous savez comment ajouter un autre champ de formulaire, par exemple:

montrant les champs:

//hooks
add_action( 'show_user_profile', 'Add_user_fields' );
add_action( 'edit_user_profile', 'Add_user_fields' );

function Add_user_fields( $user ) { ?>

    <h3>Extra fields</h3>
    <table class="form-table">
        <tr>
            <th><label for="text">text</label></th>
            <td>
                <?php 
                // get test saved value
                $saved = esc_attr( get_the_author_meta( 'user_text', $user->ID ) );
                ?>
                <input type="text" name="user_text" id="user_text" value="<?php echo $saved; ?>" class="regular-text" /><br />
                <span class="description">Simple text field</span>
            </td>
        </tr>

        <tr>
            <th><label for="dropdown">dropdown Select field</label></th>
            <td>
                <?php 
                //get dropdown saved value
                $selected = get_the_author_meta( 'user_select', $user->ID ) ); 
                ?>
                <select name="user_select" id="user_select">
                    <option value="value1" <?php echo ($selected == "value1")?  'selected="selected"' : '' ?>>Value One label</option>
                    <option value="value2" <?php echo ($selected == "value2")?  'selected="selected"' : '' ?>>Value Two label</option>

                <span class="description">Simple text field</span>
            </td>
        </tr>
    </table>
<?php }

Sauver les champs

// crochets

add_action( 'personal_options_update', 'save_user_fields' );
add_action( 'edit_user_profile_update', 'save_user_fields' );

function save_user_fields( $user_id ) {

    if ( !current_user_can( 'edit_user', $user_id ) )
        return false;

    //save text field
    update_usermeta( $user_id, 'user_text', $_POST['user_text'] );

    //save dropdown
    update_usermeta( $user_id, 'user_select', $_POST['user_select'] );
}

dans les deux cas, vous pouvez voir que j'utilise la même fonction pour stocker les données dans la base de données et pour les obtenir à partir de la base de données, quel que soit le type de champ utilisé.

1
Bainternet

Ajoutez-le dans le function.php de votre thème

add_action( 'show_user_profile', 'Add_user_fields' );
add_action( 'edit_user_profile', 'Add_user_fields' );
function Add_user_fields( $user ) { ?>
    <table class="form-table">
        <tr>
            <th><label for="dropdown">Activate/Deactivate User</label></th>
            <td>
                <?php 
                //get dropdown saved value
                $selected = get_the_author_meta('pmpro_email_confirmation_key', $user->ID); //there was an extra ) here that was not needed 
                ?>
                <select name="user_select" id="user_select">
                    <option value="validated" <?php echo ($selected == "validated")?  'selected="selected"' : '' ?>>Activate</option>
                    <option value="notvalidated" <?php echo ($selected == "notvalidated")?  'selected="selected"' : '' ?>>De-Activate</option>
                </select>
            </td>
        </tr>
    </table>
<?php } 

add_action( 'personal_options_update', 'save_user_fields' );
add_action( 'edit_user_profile_update', 'save_user_fields' );

function save_user_fields( $user_id ) {
    if ( !current_user_can( 'edit_user', $user_id ) ){
        return false;
    }
    //save dropdown
    update_usermeta( $user_id, 'pmpro_email_confirmation_key', $_POST['user_select'] );
    }
?>
0
narinder kumar