Trick # 622 | Dieser Beitrag beinhaltet 0 Wörter. – Geschätzte Lesezeit: ca. 0 Minuten.
Userdaten ändern auch mal. Auch jene der NutzerInnen Ihres Memberbereichs. Wenn Sie Ihren Nutzern erlauben möchten, ihre Profildaten direkt im Frontend der Website zu bearbeiten, bietet sich ein Shortcode an. Dieser Beitrag zeigt Ihnen, wie Sie mit einem einfachen PHP-Skript ein solches benutzerfreundliches Formular zur Userprofil-Bearbeitung erstellen.
Das Formular ist mit dem folgenden PHP-Code rasch erstellt. Fügen Sie diesen in die Datei functions.php Ihrer WordPress-Website ein. Unter Design/Theme-Datei-Editor:
add_shortcode('frontend_profile_form', 'render_profile_form');
function render_profile_form() {
if (!is_user_logged_in()) {
return '<p>Bitte melden Sie sich an, um Ihre Profildaten zu bearbeiten.</p>';
}
$user = wp_get_current_user();
$message = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['frontend_profile_form'])) {
$message = handle_profile_form_submission($user);
}
ob_start();
?>
<form class="registrierungsformular" method="post" action="">
<?php wp_nonce_field('frontend_profile_update', 'frontend_profile_nonce'); ?>
<label for="first_name">Vorname:</label><br />
<input type="text" name="first_name" id="first_name" value="<?php echo esc_attr($user->first_name); ?>" required><br>
<label for="last_name">Nachname:</label><br />
<input type="text" name="last_name" id="last_name" value="<?php echo esc_attr($user->last_name); ?>" required><br>
<label for="user_login">Benutzername (nicht bearbeitbar):</label><br />
<input type="text" name="user_login" id="user_login" value="<?php echo esc_attr($user->user_login); ?>" readonly><br>
<label for="email">E-Mail-Adresse:</label><br />
<input type="email" name="email" id="email" value="<?php echo esc_attr($user->user_email); ?>" required><br>
<label for="password">Neues Passwort:</label><br />
<input type="password" name="password" id="password"><br>
<label for="confirm_password">Passwort bestätigen:</label><br />
<input type="password" name="confirm_password" id="confirm_password"><br>
<button type="submit" name="frontend_profile_form">Speichern</button>
<?php if (!empty($message)) : ?>
<p><?php echo esc_html($message); ?></p>
<?php endif; ?>
</form>
<?php
return ob_get_clean();
}
function handle_profile_form_submission($user) {
if (!isset($_POST['frontend_profile_nonce']) || !wp_verify_nonce($_POST['frontend_profile_nonce'], 'frontend_profile_update')) {
return 'Ungültige Anfrage – bitte Seite neu laden und erneut versuchen.';
}
$first_name = sanitize_text_field($_POST['first_name']);
$last_name = sanitize_text_field($_POST['last_name']);
$user_login = sanitize_user($_POST['user_login']);
$email = sanitize_email($_POST['email']);
$password = $_POST['password'];
$confirm_password = $_POST['confirm_password'];
if (username_exists($user_login) && $user_login !== $user->user_login) {
return 'Der Benutzername wird bereits verwendet.';
}
if (email_exists($email) && $email !== $user->user_email) {
return 'Die E-Mail-Adresse wird bereits verwendet.';
}
if (!empty($password)) {
if ($password !== $confirm_password) {
return 'Die Passwörter stimmen nicht überein.';
}
if (!validate_password_strength($password)) {
return 'Das Passwort muss mindestens 8 Zeichen lang sein und Gross- und Kleinbuchstaben, Zahlen und Sonderzeichen enthalten.';
}
}
wp_update_user([
'ID' => $user->ID,
'first_name' => $first_name,
'last_name' => $last_name,
'user_email' => $email,
]);
if (!empty($password)) {
wp_set_password($password, $user->ID);
wp_set_auth_cookie($user->ID); // Benutzer direkt wieder einloggen
}
return 'Ihre Profildaten wurden erfolgreich aktualisiert.';
}
function validate_password_strength($password) {
return preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*\W).{8,}$/', $password) === 1;
}An der gewünschten Stelle im Content Ihrer Website geben Sie nun den Shortcode [frontend_profile_form] ein. Künftig erscheint nun an ebendiesem Ort das gewünschte Formular.
Optional: Formular mit CSS stylen
Wenn Sie das Onlineform noch ein wenig gestalten möchten, empfehlen wir Ihnen zusätzlich den folgenden CSS-Code. Kopieren Sie ihn in das CSS-Stylesheet Ihrer WordPress-Website – unter Design/Customizer/Zusätzliches CSS:
.registrierungsformular {
max-width: 400px;
margin: 20px auto;
padding: 10px;
border: 1px solid #ddd;
border-radius: 5px;
background-color: #f9f9f9; /* Optional: Heller Hintergrund für bessere Lesbarkeit */
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); /* Optional: Schatten für optische Tiefe */
}
.registrierungsformular label {
display: block;
margin-bottom: 5px;
font-weight: bold;
font-size: 14px; /* Konsistente Schriftgrösse */
}
.registrierungsformular input {
width: 100%;
padding: 8px;
margin-bottom: 10px;
border: 1px solid #ccc;
border-radius: 3px;
font-size: 14px; /* Konsistente Schriftgrösse */
box-sizing: border-box; /* Verhindert Layout-Probleme */
}
.registrierungsformular button {
background-color: #0073aa;
color: #fff;
padding: 10px;
border: none;
border-radius: 3px;
cursor: pointer;
width: 100%; /* Optional: Volle Breite für zentriertes Design */
font-size: 16px; /* Grössere Schrift für besseren Fokus */
font-weight: bold;
text-transform: uppercase; /* Optional: Alle Buchstaben gross für mehr Kontrast */
}
.registrierungsformular button:hover {
background-color: #005177;
}
.registrierungsformular .captcha-label {
display: block;
margin-top: 15px;
margin-bottom: 5px;
font-weight: bold;
font-size: 14px; /* Konsistente Schriftgrösse */
}
.registrierungsformular .captcha-input {
width: 100%;
padding: 8px;
margin-bottom: 10px;
border: 1px solid #ccc;
border-radius: 3px;
font-size: 14px; /* Konsistente Schriftgrösse */
box-sizing: border-box;
}Voilà: das war schon die ganze Hexerei.
Werbung


