Cum să creezi o pagină de editare profil pentru utilizatori?

14 feb. 2018, 09:01:52
Vizualizări: 26.5K
Voturi: 4

Cum pot crea o pagină de Editare Profil pentru utilizatori în frontend cu câmpuri personalizate folosind WordPress?

Exemple de Câmpuri:

Câmp pentru Încărcare Imagine

Câmp Text

Etc...

Și cum poate un utilizator să salveze aceste câmpuri?

Mulțumesc!

Iată un exemplu complet de implementare:


// Adaugă acest cod în functions.php sau într-un plugin personalizat

// Creează shortcode pentru formularul de editare profil
add_shortcode('edit_profile_form', 'custom_edit_profile_form');

function custom_edit_profile_form() {
    if (!is_user_logged_in()) {
        return 'Trebuie să fii autentificat pentru a edita profilul.';
    }

    $current_user = wp_get_current_user();
    
    // Procesează formularul când este trimis
    if (isset($_POST['update_profile'])) {
        // Verifică nonce pentru securitate
        if (wp_verify_nonce($_POST['profile_nonce'], 'update_profile')) {
            
            // Salvează câmpurile text
            update_user_meta($current_user->ID, 'phone', sanitize_text_field($_POST['phone']));
            
            // Procesează imaginea de profil
            if (!empty($_FILES['profile_image']['name'])) {
                require_once(ABSPATH . 'wp-admin/includes/image.php');
                require_once(ABSPATH . 'wp-admin/includes/file.php');
                require_once(ABSPATH . 'wp-admin/includes/media.php');
                
                $attachment_id = media_handle_upload('profile_image', 0);
                if (!is_wp_error($attachment_id)) {
                    update_user_meta($current_user->ID, 'profile_image', $attachment_id);
                }
            }
            
            echo 'Profilul a fost actualizat cu succes!';
        }
    }
    
    // Obține valorile salvate
    $phone = get_user_meta($current_user->ID, 'phone', true);
    $profile_image_id = get_user_meta($current_user->ID, 'profile_image', true);
    
    // Afișează formularul
    $form = '
    <form method="post" enctype="multipart/form-data">
        ' . wp_nonce_field('update_profile', 'profile_nonce', true, false) . '
        
        <p>
            <label>Telefon:</label>
            <input type="text" name="phone" value="' . esc_attr($phone) . '">
        </p>
        
        <p>
            <label>Imagine Profil:</label>
            <input type="file" name="profile_image">
        </p>
        
        ' . (($profile_image_id) ? wp_get_attachment_image($profile_image_id, 'thumbnail') : '') . '
        
        <p>
            <input type="submit" name="update_profile" value="Actualizează Profil">
        </p>
    </form>';
    
    return $form;
}

Pentru a folosi acest formular, adaugă shortcode-ul [edit_profile_form] în orice pagină sau post.

Acest cod:

  • Creează un formular pentru editarea profilului
  • Permite încărcarea unei imagini de profil
  • Include câmpuri text personalizate
  • Salvează datele în meta-uri de utilizator
  • Include verificări de securitate (nonce)
  • Afișează imaginea de profil curentă dacă există

Poți adăuga orice alte câmpuri personalizate urmând același model. Asigură-te că validezi și sanitizezi corespunzător datele înainte de salvare.

6
Comentarii

Pe lângă mine, folosesc un plugin pentru editarea profilului în front-end pentru formularul de editare a profilului utilizatorului https://wordpress.org/plugins/frontend-edit-profile/

Adamu Malte Adamu Malte
14 feb. 2018 10:39:21

Pentru cei care caută, acest plugin nu mai este disponibil pentru descărcare din octombrie 2019. A fost eliminat din cauza încălcării unor directive, așa că dezvoltatorul ar putea să-l actualizeze în viitor.

jeh jeh
6 aug. 2020 22:53:09

Puteți utiliza pluginul Profile Builder pentru aceasta. Iată shortcode-ul pentru editarea profilului în front-end: [wppb-edit-profile] https://wordpress.org/plugins/profile-builder/

Ravinder Kumar Ravinder Kumar
14 feb. 2018 09:19:46

Mulțumesc. Vreau să fac asta fără plugin și personalizare

Mostafa Norzade Mostafa Norzade
14 feb. 2018 09:28:14

Am mutat mai multe răspunsuri în comentarii deoarece nu erau răspunsuri, ci recomandări de produse. Răspunsurile trebuie să fie autonome, iar recomandările sunt în afara subiectului aici

Tom J Nowell Tom J Nowell
28 mar. 2022 18:53:59
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 1
3

Acesta este un lucru destul de mare de cerut, dar, pe scurt, procedați astfel:

Adăugați câmpuri suplimentare pentru utilizatori folosind codul din acest răspuns: Câmpuri Suplimentare pentru Utilizatori

Modificați-le cu un șablon personalizat pentru utilizator:

/* Obține informațiile utilizatorului. */
global $current_user, $wp_roles;
get_currentuserinfo();

Acum aveți datele utilizatorului autentificat pe care le puteți modifica. Creați câmpuri pentru ca utilizatorul să le schimbe și completați-le cu informațiile curente de exemplu:

<input name="first_name" type="text" id="first_name" value="<?php the_author_meta( 'first_name', $current_user->ID ); ?>" />

Apoi salvați datele: Mai întâi verificați dacă sunt goale și apoi suprascrieți datele.

 if ( ! empty( $_POST['first_name'] ) )
    update_user_meta( $current_user->ID, 'first_name', sanitize_text_field( $_POST['first_name'] ) );

Apoi redirecționați utilizatorul dacă datele au fost salvate:

 /* Redirecționați pentru a afișa informațiile actualizate.*/
if ( count( $error ) == 0 ) {
    //acțiune pentru plugin-uri și salvarea câmpurilor suplimentare
    do_action('edit_user_profile_update', $current_user->ID);
    $location = get_user_meta( $current_user->ID, 'user_location', true );
    wp_safe_redirect( get_bloginfo('url') . str_replace( ' ','-', $location ) );
    exit;
}

Funcționează în acest fel. Am făcut exact la fel.

14 feb. 2018 12:41:17
Comentarii

Mulțumesc. Aceste modificări sunt în panoul de administrare?

Mostafa Norzade Mostafa Norzade
14 feb. 2018 12:52:05

@Interactive - poți explica mai detaliat redirecționarea cu afișarea informațiilor actualizate? Am reușit să fac asta să funcționeze, dar după trimiterea formularului, pagina afișează vechile informații în câmpurile formularului. Dacă reîmprospătez pagina, atunci noile informații apar. Utilizatorul este actualizat când verific în partea de administrare. Mulțumesc!

stackingjasoncooper stackingjasoncooper
15 oct. 2018 20:07:22

Am lăsat mai multe remedieri de securitate și am clarificat faptul că codul legat era un răspuns WPSE, nu o recomandare de plugin.

Tom J Nowell Tom J Nowell
28 mar. 2022 18:57:54