Cum să creezi o pagină de editare profil pentru utilizatori?
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.

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.

@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!
