Tidigare i serien omfattade vi hur vi anpassade WordPress inloggnings- och registreringsformulär. Vi lade sedan till några anpassade fält till vårt registreringsformulär. Idag, i den tredje och sista delen av den här serien kommer vi att täcka hur du utvecklar ett avsnitt "Mitt konto" för användarnas webbplats där användare kan redigera sin profilinformation.
Det första vi vill göra är att skapa en sidmall för att hysa vårt innehåll. Jag gillar att prefixa min sidmallar med ordet "mall". Så min fil heter template-user-profile.php och öppningen PHP ser så här ut:
Jag har sparat det här i roten till min temakatalog. Om du inte är bekant med WordPress Page Templates rekommenderar jag att du läser länken ovan. De är extremt praktiska.
Låt oss nu gå till WordPress baksidan och skapa en sida med namnet "profil" och i Sidegenskaper meta box tilldela den vår nyskapade sidmall. När du har publicerat den här sidan borde du ha en tom sida på framsidan: http: // dindomän / profil.
Nu för att injicera lite innehåll på vår sida. Vi vill att strukturen ska vara sidinnehåll (dvs vad som helst skrivet i WordPress WYSIWYG) och sedan vårt profilformulär att följa.
Det är ofta användbart att få koden från page.php och använda den som utgångspunkt för dina sidmallar. Koden skiljer sig lite beroende på ditt tema, men det kommer sannolikt att innehålla en slinga som spetsar lite sidinnehåll. Innehållsdelen hämtas normalt med hjälp av WordPress-funktionen get_template_part (). Längre under var innehållet har hämtats, låt oss infoga vårt formulär HTML. Så för att återblick:
- Kopiera och klistra in koden från page.php till vår sidmall.
- Hitta var innehållet utmatas.
- Höger under det, sätt in följande kod och sedan går vi igenom det:
Det finns inget galet på gång här: formuläret använder Bootstrap-märkning eftersom vårt tema är byggt på Bootstrap. Andra saker att notera är att formuläret skickas med POST-metoden och vi har inkluderat ett wp_nonce_field-det här är en typ av säkerhetstoken som hjälper till att förhindra skadliga attacker. Om du inte känner till WordPress's Nonces, föreslår jag att du läser denna artikel.
Med det på plats borde du ha en blankett på framsidan av webbplatsen, men det gör inte mycket. Vi vill att den ska visa de data vi har för den inloggade användaren. Du kanske har lagt märke till att värdetillstånden i vår form echoing some PHP.
value ="förnamn; ?>"
Just nu $ user_info
objekt existerar inte eftersom vi inte har skrivit koden ännu, så låt oss börja där. Klistra in följande kod före vår blankett i template-user-profile.php.
Med hjälp av vissa WordPress-inbyggda funktioner får den nuvarande användarens ID, och med det kan vi få användarens data. Detta lagras i ett objekt som heter
$ user_info
, och som visat ovan kan vi hämta användardata ganska enkelt. För att se alla data som lagras i det objektet kan du köra envar_dump
såhär:. Detta kan vara användbart för debugging eller bara för att se vad du kan komma åt.
Bearbetar data
Det finns ett sista stycke i pusslet, och det är att bearbeta data, vilket gör det möjligt för användare att redigera sina profiler. För att hålla sakerna organiserat har jag lagt medlemskoden till en fil som är benämnd membership.php. Detta är i
lib
katalog och har inkluderats i vår functions.php-fil. När du har gjort det här, öppna din nyskapade membership.php-fil i en kodredigerare och låt oss göra den funktion som kommer att bearbeta användarnas data.Låt oss först snabbt springa igenom logiken. När inlämningsknappen slås, vill vi kontrollera att vårt nonce-fält har skickats - det kontrollerar att uppgifterna kommer från rätt plats.
Om det villkoret är uppfyllt vill vi få den nuvarande användarens ID eftersom vi behöver det för att lagra data mot. Då vill vi ordna våra data till en struktur WordPress tycker att det här är en serie med specifika nycklar. Innan vi sparar data vill vi också validera och sanera det. Och slutligen vill vi visa meddelanden till vår användare, antingen av framgång eller fel.
Och koden för allt som ser något ut så här:
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'],); om (! tomt ($ user_data ['user_pass'])) // Validera lösenorden för att kontrollera att de är desamma. om (strcmp ($ user_data ['user_pass'], $ _POST ['pass2'])! == 0) wp_redirect ('? password-error = true'); utgång; else // Om lösenordsfälten inte är inställda sparar inte. unset ($ user_data ['user_pass']); // Spara värdena till inlägget. foreach ($ user_data som $ key => $ värde) $ 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_id); ['user_pass']); else // Spara de återstående värdena. $ results = wp_update_user (array ('ID' => $ user_id, $ key => $ värde)); om (! is_wp_error ($ results) ) wp_redirect ('? profil-updated = true'); wp_redirect ('? profile-updated = false'); avsluta; add_action ('tutsplus_process_user_profile', 'tutsplus_process_user_profile_data');Nu kanske du märker att data sparas med tre olika WordPress-funktioner:
update_user_meta ()
för Twitter-namnetwp_set_password ()
för lösenordetwp_update_user ()
för återstående dataOch du har rätt att ifrågasätta detta. I grund och botten behöver de anpassade metadata (Twitter-namnet) behandlas med hjälp av den relativa funktionen och inte den allmänna uppdateringsanvändaren. Vad gäller lösenordet, medan det kan fungera med wp_update_user ()
, Jag har haft problem med det och föredrar att använda den här metoden. Kom ihåg att detta bara är en guide, och ofta är koden riktad mot att visa olika metoder för att uppnå dina krav.
Okej, så nu har vi vår funktion att bearbeta data, men det heter inte någonstans. I slutet av vår funktion kan du se att det finns en åtgärd som är förknippad med den. Så för att ringa den funktionen behöver vi bara använda WordPress: do_action () ;. Klistra sedan in den här raden ovanför formuläret på den mall för användarprofil som vi skapade tidigare:
Med det på plats, när vi skickar in vår formulär, bör det gå igenom vår funktion och bearbeta data.
Vår profil ska spara eller avvisa data nu. Kanske de två lösenorden var inte samma och sparar inte. Det finns inga meddelanden för att ge användarens återkoppling. Låt oss rädda våra användare lite sorg och ge dem några meddelanden.
I vår tutsplus_process_user_profile ()
funktion som du kanske har lagt märke till att den adderar olika frågesträngar till webbadressen beroende på resultatet av behandlingen. Så om allt är sparat och lyckat kommer vår URL att läggas till med ?profil-updated = true
, och dessa varierar beroende på resultaten. Vad vi behöver göra är att utlösa ett meddelande baserat på dessa svar.
Nedan har jag använt ett filter för att ta tag i innehållet, och genom magiken av $ _GET
Vi kan kontrollera parametrarna och spita ut vad vi behöver.
Okej, inte riktigt där-vi använder en funktion som heter
tutsplus_get_message_markup ()
ovan, men vi har ännu inte definierat det. Det tar i två parametrar:
Så låt oss definiera vårt tutsplus_get_message_markup ()
fungera:
'; $ output. = ''; $ output. = ''. $ meddelande. '
'; $ output. = '
Bra. Nu kan våra medlemmar se om deras data sparas eller inte.
Så nu har vi en fungerande prototyp för en medlemsplats. Mycket av denna funktionalitet skickas med WordPress, men vi har stylat och tweaked det för att göra det till en bättre upplevelse för våra användare. Så nu låt oss bara pricka vårt "Jag är och korsa vår" T för att förbättra upplevelsen bara lite mer.
För det första vill vi behåll icke-inloggade användare att kunna komma åt profilsidan. En enkel omdirigering till hemsidan kommer att göra. Jag har gjort en funktion som gör just det, och jag kallar det på sidor som jag vill få åtkomst till uteslutande av inloggade användare.
Här är funktionen, som placeras i membership.php:
Nu kan vi helt enkelt ringa upp funktionen längst upp i vår användarprofil-sidmall.
Nästa upp vill vi behålla användarna bra, abonnenter-ur adminområdet. Och på toppen av det, låt oss Ta bort adminfältet för inloggade användare. Låt oss sätta det här i vårt medlemskap.php.
Och slutligen är det inte så lätt att navigera inloggnings- / logoutskärmarna. Låt oss lägga till några användarspecifik navigering. Vad jag har gjort är att skapa en funktion som matar ut den relevanta koden, och detta kallas sedan i våra mallar / header.php där huvudnavigeringen görs.
'; om (is_user_logged_in ()) echo '
WordPress är en fantastisk grund för en medlemsansökan. Den har redan så mycket av funktionaliteten som är associerad med denna typ av applikation. Utöver det har folk på WordPress gjort det ganska lätt att haka på händelser och filtrera innehåll så att vi kan förlänga det som redan finns.
Jag hoppas att detta har gett dig metoder, idéer och kunskaper för att utveckla dina egna medlemssidor. Det här är inte en fullständig guide till detta ämne, utan det fungerar som en grund.
Någon feedback är välkommen, och jag ska göra mitt bästa för att svara på eventuella frågor i kommentarerna.
Observera: om du hämtar koden från GitHub-arkivet ingår den alla filer för att få ditt tema igång. Tanken är att du kan ta tag i repo och bara köra de nödvändiga Gulp and Bower-kommandon och du kommer vara borta! Om du bara vill ha de filer som innehåller kod som är specifika för denna serie, listas filerna nedan: