php сниппетов редактирования профиля пользователя в wordpress - PullRequest
0 голосов
/ 08 мая 2020

Я создал фрагмент в WordPress с этим постом с коротким кодом, найденным здесь https://wabeo.fr/espace-membre-wordpress/. Я был вынужден добавить edit_user_form () для отображения формы, но когда я публикую с ним некоторые модификации профиля пользователя, они не регистрируются.

у кого-нибудь есть хороший исходный код для создания пользовательского пространства с фрагментами?

<?php

function edit_user_form() {
    if ( is_user_logged_in() ) {
        $userdata = get_userdata( get_current_user_id() );
        echo '<form action="' . admin_url( 'admin-post.php?action=update_utilisateur' ) . '" method="post" id="update-utilisateur">';

        // Pseudo (ne peut pas être changé)
        echo '<p><label for="pseudo-user">Username</label>';
        echo '<input type="text" name="username" id="pseudo-user" value="' . $userdata->user_login . '" disabled></p>';

        // Nom
        echo '<p><label for="nom-user">Nom</label>';
        echo '<input type="text" name="nom" id="nom-user" value="' . $userdata->last_name . '"></p>';

        // Prénom
        echo '<p><label for="prenom-user">Prénom</label>';
        echo '<input type="text" name="prenom" id="prenom-user" value="' . $userdata->first_name . '"></p>';

        // Nom d'affichage
        echo '<p><label for="display_name-user">Nom d\'affichage</label>';
        echo '<input type="text" name="display_name" id="display_name-user" value="' . $userdata->display_name . '" required></p>';

        // Biographie
        echo '<p><label for="nom-user">Description</label>';
        echo '<textarea name="bio" id="bio-user">' . $userdata->user_description . '</textarea></p>';

        // Site
        echo '<p><label for="site-user">Site web</label>';
        echo '<input type="text" name="site" id="site-user" value="' . $userdata->user_url . '"></p>';

        // Email
        echo '<p><label for="email-user">Email</label>';
        echo '<input type="email" name="email" id="email-user" value="' . $userdata->user_email . '" required></p>';

        // Mot de passe (Mis à jour uniquement si présent)
        echo '<p><label for="pass-user">Mot de passe</label>';
        echo '<input type="password" name="pass" id="pass-user"><br>';
        echo '<input type="checkbox" id="show-password"><label for="show-password">Voir le mot de passe</label></p>';

        // Nonce
        wp_nonce_field( 'update-' . get_current_user_id(), 'user-front' );

        //Validation
        echo '<input type="submit" value="Mettre à jour">';

        echo '</form>';

        // Enqueue de scripts qui vont nous permettre de vérifier les champs
        wp_enqueue_script( 'inscription-front' );
    }
}

// Enregistrement de l'utilisateur
add_action( 'admin_post_update_utilisateur', 'update_utilisateur' );
function update_utilisateur() {
    // Vérifier le nonce
    if( isset( $_POST['user-front'] ) && wp_verify_nonce( $_POST['user-front'], 'update-' . get_current_user_id() ) ) {

        // Vérifier les champs requis
        if ( ! isset( $_POST['email'] ) || ! is_email( $_POST['email'] ) ) {
            wp_redirect( site_url( '/profile/?message=need-email' ) );
            exit();
        }

        // Si l'email change, alors on vérfie qu'elle n'est pas déjà utilisée
        if ( ( $emailuser = email_exists( $_POST['email'] ) ) && get_current_user_id() != $emailuser ) {
            wp_redirect( site_url( '/profile/?message=email-exist' ) );
            exit();
        }

        // Nouvelles valeurs
        $userdata = array(
            'ID' => get_current_user_id(),
            'first_name' => sanitize_text_field( $_POST['prenom'] ),
            'last_name' => sanitize_text_field( $_POST['nom'] ),
            'display_name' => sanitize_text_field( $_POST['display_name'] ),
            'description' => esc_textarea( $_POST['bio'] ),
            'user_email' => sanitize_email( $_POST['email'] ),
            'user_url' => sanitize_url( $_POST['url'] ),
        );

        // On ne met à jour le mot de passe que si un nouveau à été renseigné
        if ( isset( $_POST['pass'] ) && ! empty( $_POST['pass'] ) ) {
            $userdata[ 'user_pass' ] = trim( $_POST['pass'] );
        }

        // Mise à jour de l'utilisateur
        wp_update_user( $userdata );

        // Redirection
        wp_redirect( site_url( '/profile/?message=user-updated' ) );
        exit();
    }
}

edit_user_form()

?>
<script>
jQuery( document ).ready( function($) {
    $( '#register-user, #update-utilisateur' ).on( 'submit', function(e) {

        $( this ).find( 'input:required' ).each( function() {
            // On vérifie si les input requis sont remplis
            if ( $( this ).val().trim() == '' ) {
                e.preventDefault();
                $( this ).addClass( 'error' );
            }
        } );

        $( this ).find( 'input[type="email"]' ).each( function() {
            // Regex pour vérifier le champ email
            var pattern = new RegExp(/^[+a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i);
            if ( ! pattern.test( $( this ).val() ) ) {
                e.preventDefault();
                $( this ).addClass( 'error' );
            }
        } );

    } );

    // Toggle hidden password
    $( '#show-password' ).on( 'change', function() {
        if ( $( this ).is( ':checked' ) ) {
            $( '#pass-user' ).attr( 'type', 'text' );
        } else {
            $( '#pass-user' ).attr( 'type', 'password' );
        }
    } );
} );
</script>


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...