Activarea anunțului PHP. Cum să vă creați propria pagină de înregistrare în WordPress Multisite

Vă permite să utilizați o setare WordPress pentru mai multe site-uri în același timp. În același timp, fiecare site primește propriile tabele în baza de date cu un prefix unic.

Tabele cu date ale utilizatorilor înregistrați comune tuturor site-urilor de rețea. Acesta este un anumit plus și înregistrarea într-o zi puteți accesa mai multe site-uri. În plus, pe fiecare site, același cont poate avea drepturi diferite. De exemplu, pe un site, utilizatorul poate fi editorul și pe un alt administrator.

În instalarea obișnuită WordPress Page Înregistrarea, autorizarea și resetarea parolei Afișează fișierul WP-Login.php.

  • wP-LOGIN.PHP - Autorizare
  • wp-login.php? Acțiune \u003d Înregistrare - Înregistrare
  • wP-Login.php? Acțiune \u003d LostPassword - Resetarea parolei

În modul multisite, kernelul WordPress începe să se comporte oarecum diferit și când treceți la linkul WP-Login.php? Action \u003d Registrul va primi o redirecționare pe WP-Signup.php. Aceasta este pagina de înregistrare a rețelei dvs., care este implicită în WordPress.

În plus față de înregistrarea conturilor de utilizator obișnuite, puteți crea un site nou pe acesta dacă superministratorul a permis o astfel de oportunitate în setările de rețea (setări de rețea).

În majoritatea subiectelor, pagina de înregistrare nu arată foarte bine. Multe teme sunt folosite de cadrele CSS, cum ar fi Bootstrap și propriile clase specifice pentru stilizarea diferitelor elemente pe pagini, deci este greu să scrieți un singur HTML care va fi potrivit pentru toată lumea.

Dar nu trebuie să disperați dacă pagina pare dezamăgită. Fișierul WP-Signup.php este un lucru minunat la început, când nu există timp pentru a lucra fiecare parte a site-ului - vă puteți concentra pe alte pagini importante și conținut.

Când veți fi gata să vă faceți pagină Înregistrare, WP-Signup.php va fi un eșantion bun și un exemplu în care este ușor de înțeles spectrul de funcții pe care WordPress le oferă pentru procesarea și verificarea datelor introduse de utilizatori și creează conturi noi.

Rețeaua principală de site-uri web

Implicit, WordPress deschide pagina de înregistrare (WP-Signup.php) pe rețeaua principală (site-ul web). Cu toate acestea, puteți crea pagini de înregistrare pentru fiecare site de rețea, chiar dacă au subiecte.

Vom lua în considerare cazul atunci când un subiect este utilizat pe toate site-urile de rețea, dar există o pagină de înregistrare pe fiecare dintre ele. Site-urile diferă în limba (engleză și rusă), astfel încât pagina de înregistrare va fi afișată pe site-ul de limbă "nativ". Dacă site-urile utilizează subiecte diferite, totul va depinde de subiectele care le vor potrivi aceluiași aspect (o situație excelentă care vă poate împinge pentru a unifica toate subiectele sale) sau merită să lucrați în mod individual.

Alternativă la funcții.php.

Comandați în fișiere

Mu-Plugins poate conține orice număr de fișiere și o structură care va părea logică pentru dvs. Eu aderă la o astfel de ierarhie:

| Mu-plugin-uri | | Load.php | | Selena-Network | | | Înscriere | | | | plugin.php | | | ... | | | JetPack | | | | plugin.php.

În fișierul Load.php, traducerile și toate "pluginurile" necesare sunt conectate:

// Încărcarea transferurilor pentru mu-plugin-uri load_muplugin_textdomain ("Selena_network", "/ Selena-Rețea / Limbi /"); // Pagina funcțională pentru înregistrare necesită wpmu_plugin_dir. "/sena-network/signup/plugin.php"; // un alt plugin // necesită wpmu_plugin_dir ...

În interiorul directorului de rețea Selena, dosarele plug-in sunt stocate. Fiecare are propriul său plugin.php, pe care îl conectăm la încărcare.php. Oferă flexibilitate și capacitatea de a dezactiva instantaneu și de a porni componente separate Pe proiectul de lucru în caz de urgență.

Pagina de înregistrare

După ce am înțeles cu unde și cum vom scrie cod, puteți merge la crearea paginii de înregistrare.

Creați o pagină cu un exemplu.org/signup/ prin interfața obișnuită. Ca o adresă, puteți utiliza orice adresă URL care va părea potrivită pentru proiectul dvs.

Redirecționați la pagina de înregistrare dorită

Pentru WordPress pentru a afla despre noua noastră pagină de înregistrare și a făcut o redirecționare pe aceasta, când faceți clic pe linkul "Înregistrare", se utilizează filtrul WP_SIGNUP_LOCACACE. Acesta poate fi găsit în interiorul WP-Login.php și este cel care este responsabil pentru redirecționarea pe WP-Signup.php implicit.

Cauza "Registru": dacă (is_multisită () () () () (wp_signup_locație ", rețea_site_url (" WP-Signup.php ")); Ieșire; // ...

Cum vă amintiți, în mod implicit, pagina de înregistrare se deschide pe domeniul principal al rețelei. Acesta este motivul pentru care rețeaua_site_url () este folosit aici.

Adăugați manipulator de filtru la mu-plugin-uri / Selena-Network / Signup / Plugin.php, care va primi adresa paginii de înregistrare de pe site-ul curent:

Funcție selena_network_signup_page ($ URL);) add_filter ("wp_signup_locație", "selena_network_signup_page", 99);

selena_Network - Prefix, pe care îl folosesc în numele tuturor funcțiilor din Mu-Plugin-uri de pe site-ul meu pentru a evita conflictele, ar trebui înlocuite cu propriul prefix unic. Prioritatea adăugării filtrului 99, deoarece unele pluginuri, cum ar fi BBPress și Buddypress, pot suprascrie această adresă (Mu-plugin-urile sunt încărcate mai devreme decât pluginurile convenționale, vezi mai sus).

Vă rugăm să rețineți că Home_url () este utilizat, care, spre deosebire de Network_Site_url (), oferă adresa site-ului actual și nu site-ul principal de rețea.

Funcționalitatea WP-Signup.php

Fișierul WP-Signup.php conține un numar mare de Funcții și coduri. Pentru a vedea imaginea în ansamblu, puteți utiliza codul de pliere. De regulă, în limba engleză se numește "plierea codului".

La începutul fișierului de la 1 la 80, linia (în versiunea 4.1.1), diverse verificări sunt efectuate și ieșirea paginii "Start" utilizând get_header ().

Apoi, sunt declarate multe metode și înainte de a începe să lucrăm cu ei, merită să înțelegem ce face fiecare funcție. În interior, multe dintre acestea sunt adesea utilizate alte funcții cu prefixul WPMU_, toate sunt declarate în fișierul WP-Include / MS-Function.php. Această secțiune este greu de înțeles fără a vedea singur codul. Sub o mică descriere a funcțiilor de bază în cazul în care aveți dificultăți.

  • wpmu_signup_stylesheet () - ieșirea CSS suplimentară pe pagina de înregistrare.
  • show_blog_form () - Câmpuri pentru înregistrarea site-ului (adresa, vizibilitatea numelui pentru motoarele de căutare).
  • vALIDELATE_BLOG_FORM () - Verificarea adresei și a numelor site-ului introduse utilizând wpmu_validate_blog_signup ().
  • show_user_form () - Câmpuri pentru înregistrarea utilizatorului (login și adresa de e-mail).
  • validate_user_form () - Verificarea conectării introduse și adreselor. Mail cu wpmu_validate_user_signup ().
  • signup_another_blog () - Câmpuri pentru înregistrarea site-urilor noi utilizând show_blog_form () pentru utilizatorii care sunt deja înregistrați pe site.
  • validate_another_blog_signup () - verifică adresa și numele site-ului utilizând validate_blog_form ().
  • signup_user () este funcția principală de ieșire a paginii câmpului de înregistrare.
  • validate_user_signup () - verifică adresa de conectare și adresa de e-mail. Mail cu validate_user_form ().
  • signup_blog () - Câmpuri pentru introducerea adresei, numele și vizibilitatea site-ului (a doua etapă de înregistrare) utilizând show_blog_form ().
  • validate_blog_signup () - verifică adresa de conectare, adresa de e-mail. Mail, adresa și numele site-ului.

În partea de jos a fișierului WP-Signup.php (de la 646 cusături în versiunea 4.1.1), logica principală a paginii de înregistrare, care utilizează metodele de mai sus. Această parte a codului nu este trimisă funcției. La sfârșit, se numește Get_Footer ().

Copiați funcționarea WP-Signup.php

Apoi, procedura de copiere a unui WP-Signup.php în Mu-Plug-in va fi descrisă și va efectua modificări ale furcii. Poate părea că nu este calea cea bună. În schimb, vă puteți scrie funcțiile de la zero pentru a verifica și a ieși din formularele utilizând clase, nu funcții convenționale. În opinia mea, WP-Signup.php are deja logica necesară pentru pagina noastră, rămâne doar pentru a face schimbări minore.

Când actualizați WordPress, WP-Signup.php se modifică din când în când, dar acest lucru nu înseamnă că, cu fiecare versiune, va trebui să-și sincronizeze "forțul". Funcțiile din interiorul WP-Signup.php sunt în esență angajate numai de ieșirea HTML, verificarea datelor, crearea de conturi și site-urile sunt implicate în prefixul WPMU_, declarat în MS-Functions.php.

Vom crea o funcție care va afișa formularul de înregistrare pe pagină. Pentru a face acest lucru, copiați WP-Signup.php de la rădăcina WordPress în Mu-Plugings / Selena-Network / Signup /. Conectați-l în Mu-Pugins / Selena-Network / Signup / Plugin.php).

Necesită wpmu_plugin_dir. "/Selena-network/signup/wp-signup.php";

Ștergeți toate verificările necesare și inutile de la începutul fișierului copiat. În versiunea 4.1.1, acesta este întregul cod de la 1 la 80 de linii.

Acum suntem gata să creăm funcția principală pentru a afișa formularul de înregistrare. Pentru a face acest lucru, toată logica de la linia 646 și la sfârșitul fișierului vom fi transferați la funcția numită selena_network_signup_main. La sfârșit, ștergeți două închideri inutile

(linii 722 și 723), precum și apelul get_footer ().

În nou-creat SELENA_NETWORK_SIGNUP_MAIN () La început, vom declara variabila globală Active_Signup că toate celelalte metode din acest fișier utilizează. Și să adăugați apelul de eveniment înainte de_signup_form, pe care l-am șters de la începutul fișierului.

Funcția SELENA_NETWORK_SIGNUP_MAIN () (Global $ Active_Signup; Do_ACTION ("înainte_signup_form"); // ...)

Acum rămâne doar pentru a schimba aspectul în toate locurile în care este necesar și pagina de înregistrare este gata.

Rezultatul formularului de înregistrare

Există cel puțin două opțiuni aici. Un mod mai convenabil de a crea un cod scurt și de ao pune pe pagină prin editorul obișnuit.

// Creați un scurtcod de rețea_signup add_shortcode ("rețea_signup", "selena_network_signup_main");

A doua opțiune este de a crea o pagină de pagină-Signup.php în folderul tematic fiic. În loc de cuvântul "Înscriere", puteți utiliza un ID unic atribuit paginii. În interiorul șablonului, adăugați aspectul dorit și faceți o selecție Selena_Network_signup_main () în locul potrivit.

Ca rezultat, pagina mea de înregistrare a început să arate mult mai bine și mai curată.

Pagina de activare

În mod implicit, WordPress împarte convențional procesul de înregistrare în multisite pentru doi pași - completarea formularului de pe site-ul și activarea contului atunci când linkul este trimis la exilat scrisoare electronică. După ce completați formularul creat în secțiunea anterioară, WordPress trimite o scrisoare cu o mică instrucțiune și referință pentru a activa contul.

Pentru ieșirea paginii de activare, fișierul WP-Activate.php este răspuns amplasat în directorul rădăcină WordPress. WP-Activate.Php poate fi, de asemenea, complet modificat. Procesul este similar cu ceea ce am făcut deja pentru WP-Signup.php.

Creați exemplul.org/activa / pagina prin interfața normală. Ca o adresă, utilizați orice adresă URL care va părea potrivită pentru dvs.

Copiați fișierul WP-Activate.php la mu-plugin-urile dvs. și conectați-l la Mu-Pugins / Selena-Network / Signup / Plugin.php.

Necesită wpmu_plugin_dir. "/Selena-network/signup/wp-activate.php";

În interior, nu atât de multe conținuturi, spre deosebire de WP-Signup.php. Fișierul efectuează o singură operație - activează contul dacă se obține cheia corectă și afișează un mesaj de eroare sau o funcționare reușită.

Ștergeți toate verificările inutile și necesită - de la 1 la 69 linia în WordPress 4.1.1. La sfârșit, scoateți apelul Get_Footer (). Conținutul rămas prin transferarea la funcția Selena_Network_Activate_main ().

Este interesant să observați că constanta WP_instaling a fost anunțată aici înainte de a încărca WordPress (WP-load.php). Prezența sa cauzează WordPress să nu se încarce pluginurile.

Ca și în cazul paginii de înregistrare, rămâne doar pentru a repara aspectul în cazul în care este necesar. De asemenea, puteți modifica textul mesajelor afișate (în acest caz, nu uitați să adăugați un domeniu de text al plugin-urilor MU la toate funcțiile-traducătoare, nu este instalat în altă parte).

Funcția terminată poate fi utilizată pe o pagină predeterminată printr-un scurtcircod sau un șablon separat într-o filială.

Scrisori de activare cu referințe adecvate

Pagina de activare este gata de lucru, dar WordPress nu știe despre ea și va trimite în continuare scrisori de activare cu referire la WP-Activate.php. Spre deosebire de wp-signup.php Nu există filtru, care să permită schimbarea adresei. În schimb, trebuie să scrieți caracteristica dvs. care va trimite litere cu legături corecte.

La momentul umplerii și trimiterea unui formular pe pagină Înregistrare WordPress. Apeluri wpmu_signup_ utilizator.() sau wpmu_signup_ blog.() În funcție de tipul de înregistrare. Ambele funcții creează o nouă intrare în tabelul WP_SIGNUPS, care îl completează cu conținutul necesar, printre care există o cheie de activare a contului.

După, în funcție de funcție, se numește WPMU_SIGNUP_ utilizator._Notificare () sau wpmu_signup_ blog._Notificare (). Ambele funcții au o funcționalitate similară - generați și trimiteți o scrisoare cu o referință de activare, dar luați argumente diferite. În ambele există filtre pentru "interceptarea" evenimentelor.

Dacă (! Aplicați_filters ("WPMU_SIGNUP_USER_NOTIFICESS", $ Utilizator, $ user_email, key $, $ meta)) returnează false;

Pentru a activa conturi cu crearea blogului:

Dacă (! Aplicați_filters ("WPMU_SIGNUP_BLOG_NOTIFICESTIFICARE", $ Domeniu, $ Cale, $ Titlu, $ Utilizator, $ user_email, key $, $ meta)) (return fals;)

Rămâne doar pentru a scrie manipulatorilor în care trimiteți scrisori prin WP_mail () și, chiar în final, pentru a da fals, astfel încât WordPress nu trimite o scrisoare de activare de două ori - una dintre dvs., o altă scrisoare în mod implicit cu un link către WP-Activate.Php.

Funcție selena_network_wpmu_signup_user_Notification ($ utilizator, $ user_email, tasta $, $ meta \u003d matrice ()) (// generează un antet, text și anteturi de litere ///// Trimiteți o scrisoare sau adăugați o scrisoare de cron pentru a trimite o scrisoare Wp_mail ($ user_email, wp_specialChars_decode ($ subiect), $ message, $ message_headers); // recuperați fals, astfel încât WordPress nu trimite o scrisoare de activare de două ori returnal fals;) add_filter_over_notificat "," selena_network_wpmu_signup_user_notification ", 10, 4) ;

Dacă trimiteți scrisori prin serverul SMTP sau numărul de înregistrări este foarte mare, trebuie să vă gândiți să nu trimiteți imediat scrisori. În schimb, puteți adăuga sarcini cron folosind WordPress Cron.

Închideți accesul la WP-Signup.php și WP-Activate.Php

După ce și-a creat propriile pagini de înregistrare și de activare, poate fi necesar să închideți "originalele". De exemplu, dacă există câmpuri suplimentare pe pagina de înregistrare, care trebuie completă. De asemenea, multe site-uri WordPress sunt expuse la înregistrările de spam.

Rezolvarea a două probleme cu o acțiune poate fi întrebată Apache pentru a da 404 în cazul încercării de a deschide aceste pagini. Pentru a face acest lucru, trebuie doar să înregistrați o pereche de rescriere suplimentară în fișierul de configurare or.htaccess.

Rewritengine pe rewritebase / # Cunoașterea expresiilor regulate nu va fi niciodată superfluă :) rewriterul ^ wp-signup \\ . # WordPress WordPress.

Concluzie

Pentru aceasta și multe alte "probleme" asociate cu WordPress pe Internet există multe soluții. De exemplu, pentru a crea pagini de înregistrare și de activare, unele sunt oferite pentru a rescrie originalul WP-Signup.php și WP-Activate.Php. Acest lucru nu ar trebui făcut deoarece, în cazul actualizării WordPress, veți pierde toate modificările aduse fișierelor și nu puteți verifica integritatea kernelului utilizând.

La dezvoltarea oricărui plus, subiectele sau soluțiile ar trebui să fie cheltuite ceva timp pentru a face față ceea ce se întâmplă în interiorul WordPress. Există multe instrumente utile de depanare pentru acest lucru.

P.S.

Pentru a atribui automat roluri diferite, utilizatorii noi pot utiliza pluginul de gestionare a utilizatorilor multisite.

Dacă aveți întrebări sau dificultăți în timpul creării de pagini de înregistrare și de activare după citirea articolului, lăsați un comentariu și vom răspunde.

27.03.2015 27.03.2015

WordPress Developer. El iubește ordinea în tot și se ocupă de noi instrumente. Inspirat de arhitectura componentelor Symfony.

  • Creați propria pagină de înregistrare pentru multisite în loc de standard WP-Signup.php.

    În obișnuit instalare WordPress. Pagina de înregistrare (autorizația, resetarea parolei) afișează fișierul WP-Login.php.

    • /wp-login.php - Autorizare
    • /wp-login.php?action\u003dregister - Înregistrare
    • /wp-login.php?action\u003dLostPassWord - Resetarea parolei

    Pentru multisite în WP-Login.Php există condiții separate. Deci, atunci când faceți clic pe linkul /wp-login.php?action\u003dRegister pe Multisaite, WordPress va face o redirecționare a paginii /wp-signup.php. În multe subiecte, pagina nu pare foarte atractivă, așa că vom face propriul nostru.

    Rețeaua principală de site-uri web

    Implicit, WordPress deschide pagina de înregistrare (WP-Signup.php) pe rețeaua principală (site-ul web). Cu toate acestea, puteți efectua o pagină de înregistrare separată pentru fiecare site de rețea, chiar dacă au subiecte diferite. Vom lua în considerare cazul în cazul în care toate site-urile de rețea au propria pagină de înregistrare, dar același subiect este utilizat și site-urile diferă numai în limba. Dacă se utilizează diferite subiecte, va trebui să scrieți mai mult cod.

    funcții.php?

    Nu. Numele acestui fișier pare să fie menționat în orice articol despre WordPress. În cazul nostru, luând în considerare faptul că funcționalitatea înregistrării este concepută pentru mai multe site-uri, este logic să o luați în mu-pluginurile care sunt încărcate la deschiderea oricărui site.

    Digresiune lirică

    Este demn de remarcat faptul că Mu-plugin-urile sunt încărcate mai devreme decât plug-in-urile obișnuite și până când kernelul WordPress este complet descărcat, astfel încât apelul pentru unele funcții poate duce la erori fatabale în PHP. Descărcarea similară "devreme" are avantajele sale. Să spunem în interiorul oricărei tematici nu se poate agăța de o acțiune care este declanșată înainte de a descărca funcțiile.php fișierul din subiect. Un exemplu de acest lucru poate servi ca un plugin jetpack_module_loadd_relat-stâlp (mesaje asociate - numele modulului) cu care este posibil să urmăriți activitatea modulelor din JetPack. Este imposibil de "ambreiaj" din dosarul de subiect la această acțiune, deoarece acțiunea a lucrat deja înainte de încărcare a subiectului - pluginurile sunt încărcate mai devreme. Puteți să aruncați o privire la imaginea comună a comenzii de boot WordPress pe pagina de referință a acțiunii din cod.

    Comandați în fișiere

    Mu-Plugins poate conține orice număr de fișiere și orice diagramă, care va părea logică pentru dvs. Eu aderă la o astfel de ierarhie:

    | -Mu-plugin-uri | - | load.php | - | - | Selena-Network | - | - | - | - - | - | - | - | - | - | -... | - | - | - | -jetpack | - | - | - | - | - |

    În fișierul load.php, toate "pluginurile" necesare sunt conectate la rețeaua noastră:

    Încărcați traseele pentru toate Addons Load_Muplugin_textdomain ("Selena_network", "/ Selena-Rețea / Limbi /"); // Înscrierea în rețea necesită wpmu_plugin_dir. "/sena-network/signup/plugin.php"; // un alt plugin // necesită wpmu_plugin_dir ...

    În interiorul dosarului de rețea Selena, sunt stocate foldere plug-in, fiecare are propriul plugin.php, pe care îl conectăm la încărcare.php. Oferă flexibilitate și abilitatea de a dezactiva rapid și de a include unele lucruri.

    Adresa paginii de înregistrare

    Pentru a specifica adresa paginii de înregistrare, utilizați filtrul WP_SIGNUP_LOCACACE. Acesta poate fi găsit în interiorul fișierului WP-Login.php și este cel care este responsabil pentru redirecționarea pe WP-Signup.php.

    Cauza "Registru": dacă (is_multisită () () () () () (wp_signup_locație ", rețea_site_url (" wp-signup.php ")); Ieșire;

    Adăugați funcția dvs. în Mu-Plugins / Selena-Network / Signup / Plugin.php, care va oferi adresa paginii de înregistrare pe site-ul curent:

    Funcție SELENA_NETWORK_SIGNUP_PAGE ($ URL) (return Home_url (). "/ Înscriere /";) add_filter ("wp_signup_locație", "selena_network_signup_page", 99);

    selena_Network - Prefix, pe care îl folosesc în numele tuturor funcțiilor din Mu-Plugin-uri de pe site-ul meu pentru a evita conflictele, ar trebui înlocuite cu propriul prefix unic. Prioritatea adăugării filtrului 99, deoarece unele pluginuri, cum ar fi BBPress și Buddypress, pot suprascrie această adresă (Mu-plugin-urile sunt încărcate mai devreme decât pluginurile convenționale, vezi mai sus). Vă rugăm să rețineți că Home_url () este utilizat, în loc de rețea_site_url (), pentru a părăsi vizitatorul în același domeniu. Puteți utiliza orice adresă URL ca o adresă.

    Crearea unei pagini

    Acum, să creăm o pagină cu site.com/signup/ printr-o interfață obișnuită, iar în șablonul de dosare a fiicei noastre pentru noua noastră pagină - pagina-Signup.php. În loc de cuvântul "Înscriere", puteți utiliza un ID unic.

    În interiorul noului șablon, trebuie să apelați funcția SELENA_NETWORK_SIGNUP_MAIN (), care va afișa formularul de înregistrare.

    Este demn de remarcat faptul că întregul proces cu șabloane nu este necesar și, în schimb, puteți crea propriul cod scurt, care va apela și funcția SELENA_NETWORK_SIGNUP_MAIN ().

    wp-signup.php și wp-activate.php

    Acum vom crea o funcție care va afișa formularul de înregistrare. Pentru a face acest lucru, copiați fișierele WP-SIGUP.PHP și WP-Activate.Php de la WordPress Root în MU-Plugings / Selena-Network / Signup / (și nu uitați să le conectați în interiorul Mu-Plugins / Selena-Rețea / Signup / Plugin.php). Mai multe manipulări cu fișiere sunt extrem de dificile și lungi pentru a descrie, așa că veniți să le faceți singur. Voi descrie doar ce trebuie să fie făcut și să publicați fișierele sursă ale proiectului dvs.:

    1. La începutul fișierului, ștergeți toate necesitățile, funcțiile de apel și alte funcții din afara codului.
    2. Redenumiți toate funcțiile adăugând prefixe unice la nume.
    3. Partea de jos a codului WP-Signup.php este înfășurată în funcția Selena_Network_signup_main și la începutul său pentru a scrie Global $ Active_Signup; .
    4. Înlocuiți aspectul pe cont propriu în locurile potrivite.

    În interiorul WP-Activate.Php trebuie să faceți același lucru:

    1. Ștergeți toate funcțiile de cod extern, înfășurați aspectul într-o funcție separată.
    2. Schimbați aspectul în locurile în care este necesar.

    Fișierul WP-Activate.php este responsabil pentru pagina de activare a contului. Ca și în cazul paginii de înregistrare, trebuie să creați un șablon separat în interiorul care să apelați o funcție din fișierul WP-Activate.php.

    Trimitem scrisorile de activare

    Pagina de înregistrare trimite o scrisoare vizitatorului cu referire la activarea contului. În mod implicit, aceasta este funcția WPMU_SIGNUP_USER_NOTIFICATION () din fișierul ms-funcții.php. Funcționalitatea sa poate fi împrumutată pentru funcția sa. Motivul pentru care doriți să refuzați să utilizați această funcție - trimite o referință de activare a contului cu WP-Activate.Php. Puteți dezactiva această caracteristică utilizând filtrul WPMU_SIGNUP_USER_NOTIFICATION prin mutarea FALSE pe ea (dacă nu este de făcut, litera de activare va fi trimisă de două ori, bine, de fapt două litere diferite).

    Funcția ARMYOFSELENGOMEZ_WPMU_SIGNUP_USER_NOTIFICARE ($ utilizator, $ user_mail, tasta $, $ meta \u003d matrice ()) (/////rows_notification () funcția wp_mail ($ user_email, wp_specialchars_decode ($ subiect), $ message, $ message_headers ); Returnează false;) add_filter ("wpmu_signup_user_otificat", "ARYOFSELEGENGOMEZ_WPMU_SIGNUP_USER_NOTIFICATION", 10, 4);

    Ca rezultat, pagina de înregistrare din subiectul Selena a început să arate mult mai curat și atenți.

    Concluzie

    Internetul are multe alte modalități care nu sunt foarte corecte de a face același lucru - Apache Redirects, forme Ajax care nu vor funcționa fără script-ul Java etc. Nu mi-a plăcut foarte mult, așa că am încercat să o fac cel mai corect site-ul meu propriu.

    Am observat că fișierele de editare ar trebui să fie capabile să se îndepărteze de la sursă la Ranknesh, dacă WordPress modifică fișierele WP-Signup.php și WP-Activate.php, au fost mai ușor să le compare pentru a găsi schimbări .

    Nu uitați să vă uitați la codul sursă al tuturor funcțiilor descrise mai sus, pentru a face față pe deplin ceea ce și cum se întâmplă în interiorul codului.

    Primă. Protecție împotriva spam-urilor

    Chiar și cele mai tinere site-uri de pe WordPress sunt adesea supuse înregistrării spamului. Puteți scrie condiții nesfârșite pentru filtrarea roboților, adesea mai asemănătoare cu încercarea de a crea o inteligență artificială 🙂 în cazul unui multisite, o redirecționare obișnuită în Apache ma ajutat, cu care la deschiderea /wp-signup.php și / WP- ACITVATE.PHP, am cerut să emită 404 (nu sunt expert ajustați apacheDeci, regulile mele nu pot fi foarte corecte).

    Rewriteengine pe rewritebase / rewriterule ^ wp-signup \\ .php - rewriterule ^ wp-activate \\ .php - # Începe WordPress # Reguli de la WordPress În mod implicit Nu atingeți :) # ... # sfârșitul WordPress

    P. S. Încerc să descriu unele lucruri terțe ca în detaliu cât mai mult posibil, pentru că atunci când am început, uneori a fost cumva să spunem și să explic multe lucruri. De asemenea, cred că sfaturi mici similare pe alte materiale cineva va fi împins în studiul unui lucru nou și extinderea domeniului lor de cunoaștere. Expresiile regulate sunt utilizate în înregistrările Reciterule, ele nu sunt complet complexe, de exemplu, simbolul ^ înseamnă începutul liniei.

    Segal Vom lua în considerare exploatarea vulnerabilității critice de 1 zi în populară CMS Joomla, care a tunelat pe internet la sfârșitul lunii octombrie. Va fi vorba despre vulnerabilități cu numere CVE-2016-8869., CVE-2016-8870. și CVE-2016-9081.. Toate cele trei apar de la o bucată de cod, care a fost o dată în adâncurile cadrului, așteptând propriile ore, apoi să se elibereze și să aducă haosul, site-uri hacked și lacrimi în orice utilizator nevinovat din acest Joomla. Doar dezvoltatorii cei mai viteji și îndrăzneți ale căror ochi sunt roșii din lumina monitoarelor, iar tastaturile sunt pline de pâine, au fost capabili să provoace sufziunea umflată și să-și impună capul pe altarul de fixare.

    Avertizare

    Toate informațiile sunt furnizate exclusiv în scopuri informative. Nici editorii, nici autorul nu sunt responsabili pentru niciunul rău cauzat de materialele acestui articol.

    De ce a început totul

    La 6 octombrie 2016, Damis Palma (Demis Palma) a creat un subiect despre schimbul de stivuire, care a întrebat: De ce, de fapt, în Joomla versiunea 3.6 există două metode pentru înregistrarea utilizatorilor cu același registru de nume ()? Primul este situat în controlerul de monitorizare a utilizatorilor, iar al doilea este în UserScontrolleruser. Damis a vrut să știe dacă UserScontrolleruser :: Register () Metoda este utilizată undeva sau este doar un anacronism evolutiv care rămâne de la vechea logică. El a fost deranjat de faptul că, chiar dacă această metodă nu este utilizată în nici o prezentare, aceasta poate fi numită utilizând o cerere formată. Care a fost răspunsul de la dezvoltator sub porecla lui Itoctopus, confirmând: problema există într-adevăr. Și a trimis un raport către dezvoltatorii Joomla.

    Apoi, evenimentele au dezvoltat cea mai rapidă cale. La 18 octombrie, dezvoltatorii Joomla acceptă raportul Damis, care până la acel moment poc, permițându-vă să înregistrați utilizatorul. A publicat o notă pe site-ul său, unde, în termeni generali, despre problema și gândurile despre acest lucru. În aceeași zi vine o nouă versiune Joomla 3.6.3, care conține încă un cod vulnerabil.

    După aceasta, David Tampelli (Davide Tampellini) se rotește cu bug-ul la starea de înregistrare nu este un utilizator simplu, ci administrator. Și pe 21 octombrie, echipa de securitate Joomla sosește un nou caz. Vorbește deja despre atragerile de privilegii. În aceeași zi, anunțul apare pe site-ul Joomla care, marți, 25 octombrie, o altă versiune cu un număr de secvență 3.6.3 va fi lansată, ceea ce corectează vulnerabilitatea critică în kernelul sistemului.

    La 25 octombrie, echipa Joomla Security Strike găsește ultima problemă că o bucată de cod descoperit de Damis. Apoi, la filiala principală a depozitului oficial Joomla, comiterea din 21 octombrie, cu un nume inconspicuos pregătește 3,6.4 lansare stabilă, care stabilește bug-ul rău.

    După aceea, numeroase persoane interesate sunt legate de transmiterea dezvoltatorilor la transmiterea dezvoltatorilor - încep să promoveze vulnerabilitatea și să gătească solidul.

    La 27 octombrie, cercetătorul Harry Roberts stabilește un exploatat gata în Repositoria de Cercetare Xiphos, care poate încărca un fișier PHP la un server cu o CMS vulnerabilă.

    Detalii

    Ei bine, cu preistoria este terminată, du-te la cel mai interesant lucru - discernământul vulnerabilității. Ca versiune de testare, am instalat Joomla 3.6.3, astfel încât toate numerele de rând vor fi relevante pentru această versiune. Și toate căile către fișierele pe care le veți vedea în continuare vor fi indicate în raport cu rădăcina CMS instalată.

    Datorită Găsiți palma Damis, știm că există două metode care efectuează înregistrarea utilizatorului în sistem. Primul este folosit de CMS și este în /Components/com_users/controllers/comers/controllers/registration.php:108. Al doilea (cel pe care noi și va trebui să-l apelați), trăiește în / componente / com_Users / controlere / user.php: 293. Să ne uităm mai aproape.

    286: / ** 287: * Metoda de înregistrare a unui utilizator. 288: * 289: * @return Boolean 290: * 291: * @since 1.6 292: * / 293: Registrul funcțiilor publice () 294: (295: JSession :: KeckToken ("Post") sau Jexit (Jtext :: _ ("Jinvalid_token")); ... 300: // Obțineți datele formularului. 301: $ date \u003d $ acest-\u003e intrare-\u003e post-\u003e obține ("utilizator", matrice (), "matrice");. . 315: $ retur \u003d $ model-\u003e validate ($ formular, $ date); 316: 317: // Finalizați înregistrarea. 346: $ retur \u003d $ model-\u003e înregistrare ($ date);

    Aici am lăsat doar linii interesante. Versiunea completă a metodei vulnerabile poate fi văzută în depozitul Joomla.

    Ne vom da seama ce se întâmplă atunci când înregistrarea obișnuită a utilizatorului: Ce date sunt trimise și cum sunt procesate. Dacă înregistrarea utilizatorului este activată în setări, formularul poate fi găsit la http: //joomla.local/index.php/component/users/? Vizualizare \u003d Înregistrare.


    O solicitare legitimă de înregistrare a utilizatorilor arată ca următoarea screenshot.


    Componentele COM_USERS sunt responsabile pentru lucrul cu utilizatorii. Acordați atenție parametrului sarcinii din interogare. Are controler $. Metoda $. Să ne uităm la structura fișierului.

    Numele scriptului în dosar controlere. Respectă numele controlorilor numiți. Deoarece în cererea noastră este acum $ controller \u003d "înregistrare", fișierul va apela. Înregistrare.php. și metoda registrului său ().

    Atenție, Întrebare: Cum să transmiteți procesarea înregistrării într-o zonă vulnerabilă din cod? Probabil ați ghicit deja. Numele metodelor vulnerabile și prezente coincid (înregistrați), astfel încât să putem schimba numele controlerului numit. Și unde este controlerul vulnerabil? Chiar în dosar user.php.. Se oprește $ controller \u003d "utilizator". Noi colectăm toate împreună și obținem sarcini \u003d user.register. Acum, cererea de înregistrare este procesată de metoda de care avem nevoie.


    Al doilea lucru pe care trebuie să-l facem este să trimitem date în formatul potrivit. Totul este simplu aici. Registrul legitim () așteaptă o matrice de la noi numită Jorm, în care transmitem date pentru înregistrare - nume, conectare, parolă, poștă (a se vedea screenshot cu o interogare).

    • /Componentens/com_users/controllers/registration.php: 124: // Obțineți datele utilizatorului. 125: $ Cereredata \u003d $ Acest-\u003e intrare-\u003e post-\u003e obține ("jform", matrice (), "matrice");

    Ward-ul nostru primește aceste date din matricea numită utilizator.

    • /Components/com_users/controllers/user.php: 301: // Obțineți datele formularului. 302: $ DATA \u003d $ Acest-\u003e intrare-\u003e post-\u003e obține ("utilizator", matrice (), "matrice");

    Prin urmare, schimbăm numele tuturor parametrilor cu JFROM pe utilizator.

    Al treilea pasul nostru este de a găsi un token valid CSRF, deoarece nu va exista nici o înregistrare fără ea.

    • /Components/com_users/controllers/user.php: 296: JSession :: KeckToken ("Post") sau Jexit (Jinvalid_Token));

    Arată ca un hash MD5 și o puteți lua, de exemplu, de la formularul de autorizare de pe site /index.php/component/users/?view\u003dlogin.


    Acum puteți crea utilizatori prin metoda dorită. Dacă sa întâmplat totul, mă felicit - tocmai ați înțeles vulnerabilitatea CVE-2016-8870. "Verificarea lipsă a permiselor de înregistrare a noilor utilizatori".

    Iată cum arată în metoda "de lucru" a registrului () de la controlerul de utilizatoriControllerRegistration:

    • /Components/com_users/controllers/registration.php: 113: // Dacă înregistrarea este dezactivată - redirecționați la pagina de conectare. 114: Dacă (JComponentHelper :: GetParams ("com_Users") -\u003e Obțineți ("AllowuseRregistration") \u003d\u003d 0) 115: (116: $ this-\u003e Setredirect (JROUTE :: (index.php? Option \u003d com_Users & View \u003d Login ", Fals)); 117: 118: Întoarceți false; 119 :)

    Și astfel în vulnerabilă:

    • /Components/com_users/controllers/user.php:

    Da, în nici un caz.

    Pentru a înțelege cea de-a doua problemă mult mai gravă, vom trimite o cerere formată de noi și vom urma cum se efectuează pe diferite secțiuni ale codului. Iată o piesă responsabilă pentru verificarea datelor trimise de utilizator în metoda de lucru:

    Continuarea disponibilă numai participanților

    Opțiunea 1. Alăturați-vă comunității site-ului pentru a citi toate materialele de pe site

    Apartenența în comunitate În perioada specificată vă va deschide accesul la toate materialele Hacker, vă va mări reducerea cu acumularea personală și va acumula un rating profesionist XAKEP!

    Subiectele nu sunt, de obicei, funcționale, dar uneori noi, dezvoltatorii, trebuie să introduceți câteva posibilități în subiectul nostru pentru a face puțin mai bine și mai convenabil.

    În acest ghid, vom lua în considerare termenul "teritoriu al pluginurilor", precum și de a învăța cum să utilizați un instrument fantastic scris de Thomas Griffin: Biblioteca de activare a pluginului TGM.

    Funcționalitatea subiectului: invazia pe teritoriul pluginurilor

    Temele sunt concepute pentru a schimba designul site-ului WordPress. În mod ideal, subiectul ar trebui să afecteze doar aspectul vizual. Cu toate acestea, în cuvântul nostru "Aur", dezvoltatorii plug-in includ adesea caracteristici funcționale în subiectele lor care vă permit să mențineți competitivitatea pe piață.

    Aceasta este invazia teritoriului pluginurilor. Putem prezenta "teritoriul pluginurilor" ca unele secțiuni funcționale ale codului. Orice fragment de cod care schimbă funcționalitatea site-ului dvs. trebuie să fie reprezentat ca un plugin dacă codul specificat nu este pus în kernelul WordPress.

    Am formulat deja mai devreme într-unul din articolele mele o regulă empirică "pluginuri de teritorii:

    Dacă particularitatea este legată de reprezentarea vizuală a site-ului, atunci în acest caz ar trebui inclusă în subiect; Dacă este asociată cu funcționalitatea, atunci trebuie să fie reprezentată ca un plug-in separat.

    O regulă destul de simplă. Oamenii încă încearcă să se înregistreze la nivelul fragmentelor funcționale ale codului în subiectele lor, dar cataloagele de teme (cum ar fi WordPress.org sau Temeforest) nu iau teme care invadează teritoriul pluginurilor. Astfel, propunerea de funcționalitate în teme a devenit o anumită problemă.

    Din fericire, există o soluție simplă care nu merge împotriva regulii "teritoriului pluginurilor".

    Introducere în biblioteca de activare a pluginului TGM

    Setarea activării pluginului TGM

    Fiți atenți la funcția TGMPA () cu doi parametri la sfârșitul codului. Cel de-al doilea parametru este variabila $ config, care este, de asemenea, o matrice, cum ar fi Plugins $. După cum rezultă din numele său, puteți configura biblioteca de activare a pluginului TGM utilizând din acest masiv. Variabila acceptă propriul set de opțiuni:

    • iD (String) este un ID unic pentru biblioteca de activare a pluginului TGM din subiectul dvs. Acest lucru este foarte important: dacă alte pluginuri folosesc, de asemenea, activarea Plugin TGM, diferite ID-uri vor împiedica posibilele conflicte.
    • default_Path (șir) - o cale absolută implicită pentru plug-in-urile din subiectul dvs. Când îl instalați, puteți utiliza numele fișierului zip ca valoare a parametrului sursă pentru plug-in-ul dvs.
    • meniu (șir) - Meniu Meniu pentru instalarea plug-in-ului.
    • hAS_NOTICES (Boolean) - Dacă se specifică în Adevărat, vor fi emise notificări administrative pentru plug-in-urile necesare / recomandate.
    • răspundeți (boolean) - dacă este specificat în TRUE, utilizatorul poate "închide" notificările.
    • dISMIMYS_MSG (String) - Dacă opțiunea responsabilă este setată în FALSE, acest mesaj va fi afișată deasupra notificării de administrator.
    • este_Automatic (boolean) - dacă este specificat în TRUE, pluginurile vor fi activate după ce utilizatorul este de acord să le instaleze.
    • mesaj (șir) - HTML suplimentar, afișat în fața tabelului plug-in.
    • strings (matrice) - o matrice care include mesaje afișate. Le puteți seta ca linii de difuzare. Uită-te la fișierul Exemplu.php pentru a vedea lista completă a tuturor mesajelor.
    "MyTheme-Tgmpa", // ID-ul dvs. unic TGMPA "implicit_path" \u003d\u003e get_stylesheet_directory (). "/ Lib / plugin-uri /", // Calea absolută implicită "Meniu" \u003d\u003e "MyTheme-Install-Necesar-Plugins", // Meniu Slug "Has_Notices" \u003d\u003e Adevărat, // Afișați notificări de admin "responsabile" \u003d\u003e FALSE , // Notificările nu sunt respinse "DIMIED_MSG" \u003d\u003e "Chiar am nevoie de tine să instalați aceste pluginuri, bine?", // Acest mesaj va fi ieșire în partea de sus a NAG "este_Automatic" \u003d\u003e Adevărat, // automat Activați pluginurile după instalare "Mesaj" \u003d\u003e "", // mesajul de ieșire chiar înainte de tabelul plugin-urilor" șiruri "\u003d\u003e matrice (); // gama de șiruri de mesaje care utilizează activarea Plugin TGM);?\u003e

    Concluzie

    După cum puteți vedea, sugerează funcționalitatea în temele wordpress. Poate că trebuie să vă gândiți mai întâi despre utilizatorii care pot trece de la un subiect la altul. Biblioteca de activare a pluginului TGM oferă un mod foarte inteligent pentru acest lucru.

    Ce părere aveți despre acest instrument? Ați folosit-o vreodată, intenționați să o utilizați în viitor? Impartaseste-ti gandurile!