web-dev-qa-db-fra.com

Forcer le pseudonyme comme nom d'affichage dans le modèle de profil de modification personnalisé

Le contexte

J'ai créé un modèle "d'édition de profil" frontal. Lorsque je saisis une valeur dans la zone de texte du pseudo, seul le pseudo est mis à jour. Le forum WordPress par défaut comporte un menu de sélection permettant à l'utilisateur de sélectionner son nom d'affichage (une zone de texte pour le surnom, un menu de sélection pour le nom d'affichage).

Mon formulaire ne le fait pas parce que je ne peux pas trouver un moyen de forcer le pseudo à mettre à jour le display_name en plus (c'est-à-dire que j'ai une zone de texte pour le pseudo mais pas un menu de sélection pour le display_name - je veux automatiser cela) .

display_name est stocké dans la table 'utilisateurs'. Le pseudo est stocké dans la table 'users_meta'.

Code de sauvegarde:

<?php
/* Get user info. */
global $current_user, $wp_roles;
get_currentuserinfo();

/* Load the registration file. */
require_once( ABSPATH . WPINC . '/registration.php' );

/* If profile was saved, update profile. */
if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'update-user' ) {

    /* Update user password. */
    if ( !empty($_POST['pass1'] ) && !empty( $_POST['pass2'] ) ) {
        if ( $_POST['pass1'] == $_POST['pass2'] )
            wp_update_user( array( 'ID' => $current_user->id, 'user_pass' => esc_attr( $_POST['pass1'] ) ) );
        else
            $error = __('The passwords you entered do not match.  Your password was not updated.', 'profile');
    }

    /* Update user information. */
    if ( !empty( $_POST['url'] ) )
        update_usermeta( $current_user->id, 'user_url', esc_url( $_POST['url'] ) );
    if ( !empty( $_POST['email'] ) )
        update_usermeta( $current_user->id, 'user_email', esc_attr( $_POST['email'] ) );
    if ( !empty( $_POST['first-name'] ) )
        update_usermeta( $current_user->id, 'first_name', esc_attr( $_POST['first-name'] ) );
    if ( !empty( $_POST['last-name'] ) )
        update_usermeta($current_user->id, 'last_name', esc_attr( $_POST['last-name'] ) );
    if ( !empty( $_POST['description'] ) )
        update_usermeta( $current_user->id, 'description', esc_attr( $_POST['description'] ) );




   if ( !empty( $_POST['display_name'] ) )
        update_usermeta($current_user->id, 'display_name', esc_attr( $_POST['display_name'] ) );
   if ( !empty( $_POST['memberlocation'] ) )
        update_usermeta($current_user->id, 'memberlocation', esc_attr( $_POST['memberlocation'] ) );
   if ( !empty( $_POST['skype'] ) )
        update_usermeta($current_user->id, 'skype', esc_attr( $_POST['skype'] ) );



    /* Redirect so the page will show updated info. */
    if ( !$error ) {
        wp_redirect( get_permalink() );
        exit;
    }


global $wpdb;

global $current_user;
$current_user = wp_get_current_user();

$user_id = wp_get_current_user();
$nickname = 'testname';
update_user_meta($user_id, 'nickname', $nickname);


}


?>

Code de forme:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
        <div id="post-<?php the_ID(); ?>">
            <div class="entry-content entry">
                <?php the_content(); ?>
                <?php if ( !is_user_logged_in() ) : ?>
                        <p class="warning">
                            <?php _e('You must be logged in to edit your profile.', 'profile'); ?>
                        </p><!-- .warning -->
                <?php else : ?>
                    <?php if ( $error ) echo '<p class="error">' . $error . '</p>'; ?>
                    <form method="post" id="adduser" action="<?php the_permalink(); ?>">




                        <p class="form-nickname">
                            <label for="nickname"><?php _e('Add display name *', 'profile'); ?></label>
                            <input class="text-input" name="nickname" type="text" id="nickname" value="<?php the_author_meta( 'nickname', $current_user->id ); ?>" />
                        </p><!-- .form-memberlocation -->










                        <p class="form-email">
                            <label for="email"><?php _e('E-mail *', 'profile'); ?></label>
                            <input class="text-input" name="email" type="text" id="email" value="<?php the_author_meta( 'user_email', $current_user->id ); ?>" />
                        </p><!-- .form-email -->
                        <p class="form-memberlocation">
                            <label for="memberlocation"><?php _e('Member Location *', 'profile'); ?></label>
                            <input class="text-input" name="memberlocation" type="text" id="memberlocation" value="<?php the_author_meta( 'memberlocation', $current_user->id ); ?>" />
                        </p><!-- .form-memberlocation -->
                        <p class="form-url">
                            <label for="url"><?php _e('Website', 'profile'); ?></label>
                            <input class="text-input" name="url" type="text" id="url" value="<?php the_author_meta( 'user_url', $current_user->id ); ?>" />
                        </p><!-- .form-url -->
                        <p class="form-password">
                            <label for="pass1"><?php _e('Password *', 'profile'); ?> </label>
                            <input class="text-input" name="pass1" type="password" id="pass1" />
                        </p><!-- .form-password -->
                        <p class="form-password">
                            <label for="pass2"><?php _e('Repeat Password *', 'profile'); ?></label>
                            <input class="text-input" name="pass2" type="password" id="pass2" />
                        </p><!-- .form-password -->
                        <p class="form-textarea">
                            <label for="description"><?php _e('Biographical Information', 'profile') ?></label>
                            <textarea name="description" id="description" rows="3" cols="50"><?php the_author_meta( 'description', $current_user->id ); ?></textarea>
                        </p><!-- .form-textarea -->
                        <p class="form-submit">
                            <?php echo $referer; ?>
                            <input name="updateuser" type="submit" id="updateuser" class="submit button" value="<?php _e('Update', 'profile'); ?>" />
                            <?php wp_nonce_field( 'update-user' ) ?>
                            <input name="action" type="hidden" id="action" value="update-user" />
                        </p><!-- .form-submit -->
                    </form><!-- #adduser -->
                    <?php endif; ?>
                </div><!-- .entry-content -->
            </div><!-- .hentry .post -->
            <?php comments_template( '', true ); ?>
            <?php endwhile; ?>
        <?php else: ?>
            <p class="no-data">
                <?php _e('Sorry, no page matched your criteria.', 'profile'); ?>
            </p><!-- .no-data -->
        <?php endif; ?>

Ma question

Comment forcer le display_name à être mis à jour chaque fois que le surnom est mis à jour dans mon modèle de page personnalisé?

5
Dominor Novus

Je ne suis pas sûr à 100% si je suis la logique de votre question. Mais c'est probablement ce dont vous avez besoin:

if ( !empty( $_POST['nickname'] ) ) {
    wp_update_user( array ('ID' => $current_user->id, 'display_name' => esc_attr( $_POST['nickname'] ) ) ) ;
    update_user_meta($current_user->id, 'nickname', esc_attr( $_POST['nickname'] ) );
    update_user_meta($current_user->id, 'display_name', esc_attr( $_POST['nickname'] ) );
}

Attention : update_usermeta est obsolète et vous devez utiliser update_user_meta .

De plus, je ne sais vraiment pas pourquoi il y a un display_name dans les deux tables, wp_users et wp_users_meta, mais je suppose que cela mérite une question en soi.

Je crois que ces lignes dans votre code sont destinées à des tests ou à des restes, car je ne vois pas leur utilité et la partie $current_user/$user_id est tout à fait fausse ...

global $wpdb;

global $current_user;
$current_user = wp_get_current_user();

$user_id = wp_get_current_user();
$nickname = 'testname';
update_user_meta($user_id, 'nickname', $nickname);
1
brasofilo