Lesefortschritt:

    Memberbereich-Special – Trick #6: Formular zur Bearbeitung von Userprofilen erstellen

    27. Oktober 2026 | functions.php, Word­Press

    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 Word­Press-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 Word­Press-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

    Textauszug (Excerpt) für Seiten aktivieren

    Textauszüge - auch Excerpts genannt - sind eine famose Sache. Allerdings sind sie meist - abhängig vom verwendeten Theme - nur bei Word­Press-Beiträgen, nicht aber auf Seiten zu finden. Dabei möchte man ab und an auch eine Seite mit einem kurzen ...
    Keine Inhalte gefunden.

    Werbung

     

    Pin It on Pinterest

    Share This
    Überblick über den Datenschutz

    Diese Website verwendet Cookies, damit wir Ihnen die bestmögliche Benutzererfahrung bieten können. Cookie-Informationen werden in Ihrem Browser gespeichert und dienen dazu, Sie wiederzuerkennen, wenn Sie auf unsere Website zurückkehren, und unserem Team zu helfen, zu verstehen, welche Bereiche der Website Sie am interessantesten und nützlichsten finden.