Zu Beginn der Serie haben wir uns mit der Anpassung der WordPress-Anmelde- und Registrierungsformulare befasst. Anschließend haben wir unserem Registrierungsformular einige benutzerdefinierte Felder hinzugefügt. Heute, im dritten und letzten Teil dieser Serie, wird erläutert, wie Sie einen "Mein Konto" -Abschnitt für die Benutzer Ihrer Website erstellen, in dem die Benutzer ihre Profilinformationen bearbeiten können.
Als Erstes möchten wir eine Seitenvorlage erstellen, in der unsere Inhalte untergebracht werden. Ich möchte meinen Seitenvorlagen gerne das Wort "Vorlage" voranstellen. Meine Datei heißt also template-user-profile.php und das öffnende PHP sieht folgendermaßen aus:
Ich habe dies im Stammverzeichnis meines Designverzeichnisses gespeichert. Wenn Sie mit WordPress-Seitenvorlagen nicht vertraut sind, schlage ich vor, dass Sie den Link oben lesen. Sie sind sehr praktisch.
Gehen wir nun zum WordPress-Backend und erstellen Sie eine Seite mit dem Namen "Profil" und im Seitenattribute Weisen Sie ihm die neu erstellte Seitenvorlage zu. Nachdem Sie diese Seite veröffentlicht haben, sollten Sie eine leere Seite im Frontend haben: http: // IhreDomäne / Profil.
Nun, um etwas Inhalt in unsere Seite einzufügen. Wir möchten, dass die Struktur Seiteninhalt ist (d. H. Was auch immer in WordPress WYSIWYG geschrieben wird) und dann unser Profilformular folgt.
Es ist oft hilfreich, den Code aus page.php zu beziehen und diesen als Ausgangspunkt für Ihre Seitenvorlagen zu verwenden. Dieser Code unterscheidet sich je nach Design ein wenig, enthält jedoch höchstwahrscheinlich eine Schleife, die Seiteninhalt ausspuckt. Der Inhaltsteil wird normalerweise mit der WordPress-Funktion get_template_part () abgerufen. Direkt unterhalb des Inhalts, an dem der Inhalt abgerufen wurde, fügen Sie unser Formular-HTML ein. Um es kurz zu fassen:
- Kopieren Sie den Code aus page.php und fügen Sie ihn in unsere Seitenvorlage ein.
- Finden Sie heraus, wo der Inhalt ausgegeben wird.
- Fügen Sie direkt darunter den folgenden Code ein, und wir gehen ihn durch:
Hier gibt es nichts Verrücktes: Das Formular verwendet Bootstrap-Markup, da unser Thema auf Bootstrap basiert. Beachten Sie außerdem, dass das Formular mit der POST-Methode gesendet wird und wir ein wp_nonce_field eingefügt haben. Hierbei handelt es sich um einen Sicherheitstoken, der bösartige Angriffe verhindert. Wenn Sie mit WordPress Nonces nicht vertraut sind, schlage ich vor, diesen Artikel zu lesen.
Wenn dies der Fall ist, sollten Sie ein Formular auf der Vorderseite der Website haben, aber es tut nicht viel. Wir möchten, dass die Daten angezeigt werden, die wir für den angemeldeten Benutzer haben. Möglicherweise haben Sie festgestellt, dass die Wertattribute in unserem Formular einige PHP-Effekte enthalten.
value = "Vorname; ?> "
Genau jetzt das $ user_info
object existiert nicht, da wir den Code noch nicht geschrieben haben, also fangen wir dort an. Fügen Sie den folgenden Code vor unserem Formular in template-user-profile.php ein.
Mit einigen nativen WordPress-Funktionen erhält es die aktuelle Benutzer-ID. Dadurch können wir die Benutzerdaten abrufen. Dies wird in einem Objekt gespeichert
$ user_info
, und wie oben gezeigt, können wir Benutzerdaten ganz einfach abrufen. Um alle in diesem Objekt gespeicherten Daten anzuzeigen, können Sie a ausführenvar_dump
wie so:. Dies kann zum Debuggen nützlich sein oder nur um zu sehen, auf was Sie zugreifen können.
Verarbeitung der Daten
Es gibt ein letztes Teil des Puzzles, und zwar das Verarbeiten der Daten, sodass Benutzer ihre Profile bearbeiten können. Um die Dinge in Ordnung zu halten, habe ich den Mitgliedscode in eine Datei mit der Bezeichnung "erschaft.php "eingefügt. Das ist in der
lib
Verzeichnis und wurde in unsere Datei "functions.php" aufgenommen. Wenn Sie dies getan haben, öffnen Sie die neu erstellte Membership.php-Datei in einem Code-Editor. Lassen Sie uns die Funktion erstellen, die die Benutzerdaten verarbeitet.Lassen Sie uns zunächst die Logik durchgehen. Wenn Sie auf die Schaltfläche "Senden" klicken, möchten wir prüfen, ob unser Nonce-Feld gesendet wurde. Dies überprüft, ob die Daten von der richtigen Stelle kommen.
Wenn diese Bedingung erfüllt ist, möchten wir die ID des aktuellen Benutzers abrufen, da diese zum Speichern der Daten benötigt wird. Dann möchten wir unsere Daten in einer WordPress-Struktur strukturieren - in diesem Fall handelt es sich um ein Array mit bestimmten Schlüsseln. Vor dem Speichern der Daten möchten wir sie auch validieren und desinfizieren. Und zum Schluss möchten wir unseren Benutzern Meldungen über Erfolg oder Fehler anzeigen.
Und der Code für all das sieht ungefähr so aus:
sanitize_text_field ($ _POST ['first_name']), 'last_name' => sanitize_text_field ($ _POST ['last_name']), 'user_email' => sanitize_email ($ _POST ['email']), 'twitter_name' => sanitize_text_field (> $ _POST ['twitter_name']), 'user_pass' => $ _POST ['pass1'],); if (! empty ($ user_data ['user_pass'])) // Überprüfen Sie die Kennwörter, um zu prüfen, ob sie gleich sind. if (strcmp ($ user_data ['user_pass'], $ _POST ['pass2'])! == 0) wp_redirect ('? password-error = true'); Ausfahrt; else // Wenn die Kennwortfelder nicht festgelegt sind, speichern Sie sie nicht. unset ($ user_data ['user_pass']); // Speichern Sie die Werte für den Beitrag. foreach ($ user_data als $ key => $ value) $ results = "; // http://codex.wordpress.org/Function_Reference/wp_update_user if ($ key == 'twitter_name') $ results = update_user_meta ($ user_id, $ key, $ value); unset ($ user_data ['twitter_name']); elseif ($ key == 'user_pass') wp_set_password ($ user_data ['user_pass'], $ user_data); unset ($ user_data) ['user_pass']); else // Speichern Sie die restlichen Werte. $ results = wp_update_user (array ('ID' => $ user_id, $ key => $ value)); if (! is_wp_error ($ results) ) wp_redirect ('? profile-updated = true'); wp_redirect ('? profile-updated = false'); exit; add_action ('tutsplus_process_user_profile', 'tutsplus_process_user_profile_data');Nun stellen Sie möglicherweise fest, dass die Daten mit drei verschiedenen WordPress-Funktionen gespeichert werden:
update_user_meta ()
für den Twitter-Namenwp_set_password ()
für das Passwortwp_update_user ()
für die restlichen DatenUnd Sie haben Recht, dies zu hinterfragen. Grundsätzlich müssen die benutzerdefinierten Metadaten (der Twitter-Name) mit der relativen Funktion und nicht mit der allgemeinen Update-Benutzerfunktion verarbeitet werden. Wie für das Passwort, während es funktioniert wp_update_user ()
, Ich hatte Probleme damit und ziehe es vor, diese Methode zu verwenden. Denken Sie daran, dass dies nur ein Leitfaden ist, und häufig soll der Code verschiedene Methoden demonstrieren, um Ihre Anforderungen zu erreichen.
Okay, jetzt haben wir unsere Funktion, um die Daten zu verarbeiten, aber sie werden nirgendwo aufgerufen. Am Ende unserer Funktion können Sie sehen, dass damit eine Aktion verbunden ist. Um diese Funktion aufzurufen, müssen Sie nur das bereitgestellte WordPress verwenden: do_action () ;. Fügen Sie diese Zeile oberhalb Ihres Formulars in die zuvor erstellte Seitenvorlage "Benutzerprofil" ein:
Wenn wir das Formular absenden, sollte es unsere Funktion durchlaufen und die Daten verarbeiten.
Unser Profilformular sollte die Daten jetzt speichern oder ablehnen. Vielleicht waren die beiden Passwörter nicht gleich und retteten nicht. Es gibt keine Meldungen, die dem Benutzer Rückmeldungen liefern. Lassen Sie uns unsere Benutzer etwas Trauer ersparen und ihnen einige Nachrichten geben.
In unserer tutsplus_process_user_profile ()
Funktion, die Sie möglicherweise bemerkt haben, hängt abhängig vom Ergebnis der Verarbeitung unterschiedliche Abfragezeichenfolgen an die URL an. Wenn also alles gespeichert und erfolgreich ist, wird unsere URL mit angehängt ?Profil aktualisiert = wahr
, und diese variieren je nach den Ergebnissen. Was wir tun müssen, ist, eine Nachricht auszulösen, die auf diesen Antworten basiert.
Im Folgenden habe ich einen Filter verwendet, um auf den Inhalt zuzugreifen und durch die Magie von $ _GET
Wir können die Parameter überprüfen und ausspucken, was wir brauchen.
Okay, nicht ganz da - wir verwenden eine Funktion namens
tutsplus_get_message_markup ()
oben, aber wir haben es noch nicht definiert. Es braucht zwei Parameter:
Also definieren wir unsere tutsplus_get_message_markup ()
Funktion:
'; $ output. = ''; $ output. = ''. $ message. '
'; $ output. = '
Großartig. Jetzt können unsere Mitglieder sehen, ob ihre Daten gespeichert werden oder nicht.
Jetzt haben wir einen funktionierenden Prototyp für eine Mitgliederwebsite. Viele dieser Funktionen sind im Lieferumfang von WordPress enthalten, wir haben sie jedoch so gestaltet und optimiert, dass sie für unsere Benutzer ein besseres Erlebnis ist. Also lasst uns jetzt unsere 'Ich's' und 'T's' kreuzen, um das Erlebnis ein bisschen mehr zu verbessern.
Erstens wollen wir verhindern, dass nicht angemeldete Benutzer auf die Profilseite zugreifen können. Eine einfache Weiterleitung auf die Startseite reicht aus. Ich habe eine Funktion erstellt, die genau das tut, und ich nenne sie auf Seiten, auf die ich ausschließlich von angemeldeten Benutzern zugreifen möchte.
Hier ist die Funktion, die in der Mitgliedschaft.php abgelegt wird:
Jetzt können wir die Funktion ganz oben in unserer Seitenvorlage "Benutzerprofil" aufrufen.
Als nächstes wollen wir die Nutzer gut halten, Abonnenten-aus dem Admin-Bereich heraus. Und obendrein noch Entfernen Sie die Admin-Leiste für angemeldete Benutzer. Lassen Sie uns dies erneut in unsere Membership.php aufnehmen.
Und schließlich ist das Navigieren in den Login / Logout-Bildschirmen nicht sehr einfach. Fügen wir einige hinzu benutzerspezifische Navigation. Was ich getan habe, ist die Erstellung einer Funktion, die den entsprechenden Code ausgibt. Dieser wird dann in unserer templates / header.php aufgerufen, wo die Hauptnavigation dargestellt wird.
'; if (is_user_logged_in ()) echo '
WordPress ist eine erstaunliche Grundlage für eine Mitgliedschaftsbewerbung. Es verfügt bereits über so viele Funktionen, die mit dieser Art von Anwendung verbunden sind. Darüber hinaus haben die Leute bei WordPress es ziemlich einfach gemacht, sich an Ereignisse zu binden und Inhalte zu filtern, sodass wir erweitern können, was bereits vorhanden ist.
Ich hoffe, dass Ihnen dies die Methoden, Ideen und das Wissen vermittelt hat, um Ihre eigenen Mitgliederseiten zu entwickeln. Dies ist keinesfalls ein vollständiger Leitfaden zu diesem Thema, sondern dient als Grundlage.
Jedes Feedback ist willkommen, und ich werde mein Bestes tun, um Fragen in den Kommentaren zu beantworten.
Bitte beachten Sie: Wenn Sie den Code aus dem GitHub-Repository herunterladen, ist dieser enthalten alle Dateien um dein Thema zum Laufen zu bringen. Die Idee ist, dass Sie sich das Repo besorgen können und einfach die nötigen Gulp- und Bower-Befehle ausführen können. Wenn Sie nur die Dateien wünschen, die Code enthalten, der für diese Serie spezifisch ist, sind die Dateien unten aufgeführt: