Hoe u uw eigen registratiepagina kunt maken in WordPress Multisite. We verplaatsen de statische gegevens naar een aparte server en verbinden het CDN

Hiermee kunt u één WordPress-installatie voor meerdere sites tegelijk gebruiken. In dit geval krijgt elke site zijn eigen tabellen in de database met een uniek voorvoegsel.

Tabellen met gegevens van geregistreerde gebruikers zijn gemeenschappelijk voor alle sites op het netwerk. Dit is een pluspunt en als u zich eenmaal registreert, krijgt u toegang tot verschillende sites. Bovendien kan op elke site hetzelfde account verschillende rechten hebben. Op de ene site kan een gebruiker bijvoorbeeld een redacteur zijn en op een andere site een beheerder.

In een typische WordPress-installatie geeft het wp-login.php-bestand de registratie-, login- en wachtwoordresetpagina weer.

  • wp-login.php - autorisatie
  • wp-login.php?action=registreren - registratie
  • wp-login.php?action=lostpassword - wachtwoord opnieuw instellen

In Multisite-modus begint de WordPress-kern zich enigszins anders te gedragen en wanneer u de link wp-login.php?action=register volgt, zal er een omleiding naar wp-signup.php plaatsvinden. Dit is uw netwerkregistratiepagina die standaard bij WordPress wordt geleverd.

Naast het registreren van reguliere gebruikersaccounts, kunt u er ook een nieuwe website op maken als de superbeheerder deze functie heeft ingeschakeld in de netwerkinstellingen (Netwerkbeheerder → Instellingen → Netwerkinstellingen).

Bij de meeste thema's ziet de registratiepagina er niet erg goed uit. Veel thema's gebruiken CSS-frameworks zoals Bootstrap en hun eigen aangepaste klassen om verschillende elementen op pagina's op te maken, dus het is moeilijk om één HTML te schrijven die bij iedereen past.

Maar wanhoop niet als de pagina er slordig uitziet. Het wp-signup.php-bestand is in het begin geweldig, als je geen tijd hebt om elk detail van de site te doornemen, kun je je concentreren op andere, belangrijkere pagina's en inhoud.

Wanneer u klaar bent om uw eigen aanmeldingspagina te maken, is wp-signup.php een goed sjabloon en voorbeeld om eenvoudig de reeks functies te begrijpen die WordPress biedt voor het verwerken en valideren van gebruikersinvoer en het maken van nieuwe accounts.

Hoofdsite van het netwerk

Standaard opent WordPress de registratiepagina (wp-signup.php) op het hoofddomein (site) van het netwerk. U kunt echter voor elke site in uw netwerk registratiepagina's maken, zelfs als deze een thema hebben.

We zullen het geval overwegen waarin alle sites in het netwerk hetzelfde thema gebruiken, maar elk van hen een registratiepagina heeft. De sites verschillen in taal (Engels en Russisch), dus de registratiepagina wordt weergegeven in de “moedertaal” van de site. Als sites verschillende thema's gebruiken, zal alles afhangen van wat deze thema's precies zijn, of dezelfde lay-out bij hen past (een uitstekende situatie die u ertoe kan aanzetten al uw thema's te verenigen) of dat het de moeite waard is om aan de pagina's afzonderlijk te werken.

Alternatief voor functies.php

Bestandsvolgorde

MU-plug-ins kunnen een willekeurig aantal bestanden bevatten en een structuur die voor u logisch lijkt. Ik blijf bij zoiets als deze hiërarchie:

| mu-plug-ins | | laden.php | | selena-netwerk | | | aanmelden | | | | plug-in.php | | | ... | | | jetpack | | | | plug-in.php

Het load.php-bestand bevat vertalingen en alle benodigde “plug-ins”:

// Vertalingen voor MU-plug-ins laden load_muplugin_textdomain("selena_network", "/selena-network/linguals/"); // Voor de functionaliteit van de registratiepagina is WPMU_PLUGIN_DIR vereist. "/selena-netwerk/signup/plugin.php"; // Nog een plug-in // vereist WPMU_PLUGIN_DIR ...

Plug-inmappen worden opgeslagen in de selena-netwerkmap. Elk heeft zijn eigen plugin.php, die we opnemen in load.php. Dit geeft u de flexibiliteit en mogelijkheid om in geval van nood individuele componenten van een werkproject onmiddellijk in en uit te schakelen.

Registratiepagina

Nadat we hebben uitgezocht waar en hoe we de code gaan schrijven, kunnen we doorgaan met het maken van een registratiepagina.

Laten we een pagina maken met het adres example.org/signup/ via de normale interface. U kunt elke URL gebruiken die geschikt lijkt voor uw project.

Omleiden naar de gewenste registratiepagina

Om ervoor te zorgen dat WordPress onze nieuwe registratiepagina leert kennen en er precies naartoe doorverwijst, wordt het wp_signup_location filter gebruikt wanneer u op de link “Registreren” klikt. Het is te vinden in wp-login.php en is standaard verantwoordelijk voor het doorverwijzen naar wp-signup.php.

Case "register": if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); exit; // ...

Zoals u zich herinnert, wordt de registratiepagina standaard geopend op het hoofddomein van het netwerk. Dit is de reden waarom hier network_site_url() wordt gebruikt.

Laten we onze handler toevoegen aan het filter in mu-plugins/selena-network/signup/plugin.php, die het adres van de registratiepagina op de huidige site zal retourneren:

Functie selena_network_signup_page($url) ( return home_url("signup"); ) add_filter("wp_signup_location", "selena_network_signup_page", 99);

selena_network is het voorvoegsel dat ik gebruik in de namen van alle functies in MU-plug-ins op mijn site om botsingen te voorkomen. Het moet worden vervangen door uw eigen unieke voorvoegsel. De prioriteit van het toevoegen van een filter is 99, omdat sommige plug-ins, bijvoorbeeld bbPress en BuddyPress, dit adres kunnen overschrijven met hun eigen adres (MU-plug-ins laden eerder dan reguliere plug-ins, zie hierboven).

Houd er rekening mee dat home_url() wordt gebruikt, wat, in tegenstelling tot network_site_url(), het adres van de huidige site retourneert, en niet de hoofdsite van het netwerk.

Functionaliteit wp-signup.php

Het wp-signup.php-bestand bevat een groot aantal functies en code. Om het grote geheel te zien, kunt u codevouwen gebruiken. In het Engels wordt dit in de regel ‘code-folding’ genoemd.

Helemaal aan het begin van het bestand, van regel 1 tot en met 80 (in versie 4.1.1), worden verschillende controles uitgevoerd en wordt de “start” van de pagina uitgevoerd met behulp van get_header() .

Vervolgens worden veel methoden gedeclareerd, en voordat we ermee aan de slag gaan, is het de moeite waard om te begrijpen wat elke functie doet. Velen van hen gebruiken vaak andere functies met het voorvoegsel wpmu_, die allemaal worden gedeclareerd in het bestand wp-includes/ms-functions.php. Dit gedeelte is moeilijk te begrijpen zonder de code zelf te zien. Hieronder vindt u een korte beschrijving van de belangrijkste functies voor het geval u problemen ondervindt.

  • wpmu_signup_stylesheet() - Voert extra CSS uit op de registratiepagina.
  • show_blog_form() - velden voor siteregistratie (adres, naam, zichtbaarheid voor zoekmachines).
  • validate_blog_form() - valideert het ingevoerde siteadres en de titel met wpmu_validate_blog_signup() .
  • show_user_form() - velden voor gebruikersregistratie (login en e-mailadres).
  • validate_user_form() — controleer de ingevoerde login en het e-mailadres. mail met wpmu_validate_user_signup() .
  • signup_another_blog() - velden voor het registreren van nieuwe sites met show_blog_form() voor gebruikers die al op de site zijn geregistreerd.
  • validate_another_blog_signup() - controleert het siteadres en de titel met behulp van validate_blog_form() .
  • signup_user() is de hoofdfunctie voor het weergeven van de velden van de registratiepagina.
  • validate_user_signup() - controleert login en e-mailadres. mail met validate_user_form() .
  • signup_blog() - velden voor het invoeren van het adres, de naam en de zichtbaarheid van de site (tweede registratiestap) met show_blog_form() .
  • validate_blog_signup() - controleert login, e-mailadres. e-mailadres, adres en websitenaam.

Helemaal onderaan het bestand wp-signup.php (vanaf regel 646 in versie 4.1.1) bevindt zich de hoofdlogica van de registratiepagina, die alle hierboven beschreven methoden gebruikt. Dit deel van de code is niet opgenomen in de functie. Aan het einde wordt get_footer() aangeroepen.

Kopieer de functionaliteit van wp-signup.php

Hieronder wordt de procedure beschreven voor het kopiëren van wp-signup.php naar MU-plug-ins en het aanbrengen van wijzigingen in de “fork”. Dit lijkt misschien niet de beste manier om te gaan. In plaats daarvan kunt u uw eigen functies helemaal opnieuw schrijven om formulieren te valideren en weer te geven met behulp van klassen in plaats van reguliere functies. Naar mijn mening heeft wp-signup.php al de nodige logica voor onze pagina, het enige dat overblijft is het aanbrengen van enkele kleine wijzigingen.

Wanneer WordPress wordt bijgewerkt, verandert wp-signup.php ook van tijd tot tijd, maar dit betekent niet dat u uw “fork” bij elke release moet synchroniseren. De functies binnen wp-signup.php houden zich feitelijk alleen bezig met HTML-uitvoer, gegevensverificatie, het aanmaken van accounts en sites, en methoden met het voorvoegsel wpmu_, gedeclareerd in ms-functions.php, zijn hierbij betrokken.

Laten we een functie maken die het registratieformulier op de pagina weergeeft. Om dit te doen, kopieert u wp-signup.php van de WordPress-root naar mu-plugings/selena-network/signup/ . Laten we het aansluiten in mu-plugins/selena-network/signup/plugin.php).

Vereist WPMU_PLUGIN_DIR . "/selena-network/signup/wp-signup.php";

Laten we alle noodzakelijke en onnodige controles vanaf het allereerste begin van het gekopieerde bestand verwijderen. In versie 4.1.1 is dit alle code van regel 1 tot en met 80.

Nu zijn we klaar om de hoofdfunctie te maken om het registratieformulier weer te geven. Om dit te doen, zullen we alle logica van regel 646 naar het einde van het bestand overbrengen naar een functie genaamd selena_network_signup_main. Helemaal aan het einde verwijderen we twee extra sluitingen

(regels 722 en 723), evenals de get_footer()-aanroep.

In het nieuw gemaakte selena_network_signup_main() zullen we helemaal aan het begin de globale active_signup variabele declareren, die door alle andere methoden uit dit bestand wordt gebruikt. En laten we een aanroep toevoegen aan de before_signup_form gebeurtenis, die we vanaf het begin van het bestand hebben verwijderd.

Functie selena_network_signup_main() ( global $active_signup; do_action("before_signup_form"); // ... )

Nu rest alleen nog het veranderen van de layout op alle plekken waar dat nodig is en de registratiepagina is klaar.

Uitvoer van het registratieformulier

Er zijn hier minstens twee opties. Een handiger manier is om een ​​shortcode te maken en deze via een gewone editor op de pagina te plaatsen.

// Maak een shortcode network_signup add_shortcode("network_signup", "selena_network_signup_main");

De tweede optie is om een ​​paginasjabloon page-signup.php aan te maken in uw onderliggende themamap. In plaats van het woord "aanmelden" kunt u de unieke ID gebruiken die aan de pagina is toegewezen. Voeg binnen de sjabloon de benodigde lay-out toe en roep selena_network_signup_main() op de juiste plaats aan.

Als gevolg hiervan zag mijn registratiepagina er veel beter en overzichtelijker uit.

Activeringspagina

Standaard verdeelt WordPress het registratieproces in Multisite in twee stappen: het invullen van een formulier op de site en het activeren van uw account door op de link te klikken die in een e-mail is verzonden. Nadat u het in de vorige sectie gemaakte formulier heeft ingevuld, stuurt WordPress een e-mail met korte instructies en een link om uw account te activeren.

Het wp-activate.php-bestand in de hoofdmap van WordPress is verantwoordelijk voor het weergeven van de activeringspagina. wp-activate.php kan ook volledig worden gewijzigd. Het proces is vergelijkbaar met wat we al deden voor wp-signup.php.

Laten we de voorbeeld.org/activate/-pagina maken via de normale interface. Gebruik voor het adres elke URL die voor u geschikt lijkt.

Laten we het bestand wp-activate.php naar onze MU-plug-ins kopiëren en verbinden met mu-plugins/selena-network/signup/plugin.php.

Vereist WPMU_PLUGIN_DIR . "/selena-network/signup/wp-activate.php";

Er zit niet veel inhoud in, in tegenstelling tot wp-signup.php. Het bestand voert een enkele bewerking uit: het activeert het account als de juiste sleutel wordt ontvangen en geeft een bericht weer over de fout of de succesvolle voltooiing van de bewerking.

Laten we alle onnodige controles en vereisten verwijderen - van regel 1 tot 69 in WordPress 4.1.1. Helemaal aan het einde verwijderen we de aanroep get_footer(). We zullen de resterende inhoud overbrengen naar de functie selena_network_activate_main().

Het is interessant om op te merken dat hier, voordat WordPress (wp-load.php) werd geladen, de constante WP_INSTALLING werd gedeclareerd. De aanwezigheid ervan zorgt ervoor dat WordPress geen plug-ins laadt.

Net als bij de registratiepagina hoeft u alleen nog de lay-out waar nodig te corrigeren. U kunt ook de tekst van de weergegeven berichten wijzigen (vergeet in dit geval niet om het tekstdomein van uw MU-plug-ins toe te voegen aan alle vertaalfuncties; het is standaard nergens geïnstalleerd).

De kant-en-klare functie kan worden gebruikt op een vooraf gemaakte pagina via een shortcode of een aparte template in een child-thema.

Activeringsbrieven met correcte links

De activatiepagina is klaar voor gebruik, maar WordPress weet er niets van en zal nog steeds activatie-e-mails sturen met een link naar wp-activate.php. In tegenstelling tot wp-signup.php is er geen filter waarmee u het adres kunt wijzigen. In plaats daarvan moet u uw eigen functie schrijven die e-mails met de juiste links verzendt.

Wanneer u het formulier op de registratiepagina invult en verzendt, roept WordPress wpmu_signup_ aan gebruiker() of wpmu_signup_ bloggen() afhankelijk van het registratietype. Beide functies creëren een nieuw item in de wp_signups-tabel en vullen deze met de benodigde inhoud, waaronder de accountactiveringssleutel.

Daarna wordt, afhankelijk van de functie, wpmu_signup_ aangeroepen gebruiker _notification() of wpmu_signup_ bloggen _melding() . Beide functies hebben vergelijkbare functionaliteit: ze genereren en verzenden een e-mail met een activeringslink, maar gebruiken verschillende argumenten. Beide hebben filters om de gebeurtenis te ‘onderscheppen’.

Als (! apply_filters("wpmu_signup_user_notification", $user, $user_email, $key, $meta)) false retourneert;

Om accounts te activeren met het maken van blogs:

If (! apply_filters("wpmu_signup_blog_notification", $domain, $path, $title, $user, $user_email, $key, $meta)) ( return false; )

Het enige dat overblijft is het schrijven van uw eigen handlers, waarin brieven worden verzonden via wp_mail() , en zorg er helemaal aan het einde voor dat u false retourneert, zodat WordPress niet twee keer een activeringsbrief verzendt - de ene is van u, de andere is de standaard brief met een link naar wp-activate.php .

Functie selena_network_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // Genereer de header, tekst en headers van de brief // ... // Verstuur de brief of voeg een Cron-taak toe om de brief te verzenden letter wp_mail($user_email , wp_specialchars_decode($subject), $message, $message_headers); // Geef false zodat WordPress de activerings-e-mail niet twee keer verzendt return false; ;

Als u e-mails verzendt via een SMTP-server of het aantal registraties is erg groot, kunt u overwegen om niet meteen e-mails te verzenden. In plaats daarvan kunt u Cron-taken toevoegen met behulp van WordPress Cron.

We sluiten de toegang tot wp-signup.php en wp-activate.php

Nadat u uw eigen registratie- en activeringspagina's heeft gemaakt, wilt u wellicht de "originelen" sluiten. Bijvoorbeeld als er extra velden op de registratiepagina staan ​​die ingevuld moeten worden. Ook zijn veel WordPress-sites onderhevig aan spamregistraties.

Je kunt twee problemen in één actie oplossen door Apache te vragen een 404 te retourneren als je deze pagina's probeert te openen. Om dit te doen, hoeft u alleen maar een paar extra RewriteRules toe te voegen aan uw configuratiebestand of .htaccess .

RewriteEngine op RewriteBase / # Kennis van reguliere expressies zal nooit overbodig zijn :) RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # BEGIN WordPress # We houden ons standaard niet aan de WordPress-regels :) # .. # EINDE WordPress

Conclusie

Voor dit en vele andere WordPress “problemen” zijn er vele oplossingen op internet te vinden. Om bijvoorbeeld registratie- en activeringspagina's te maken, stellen sommigen voor om de originele wp-signup.php en wp-activate.php te herschrijven. Dit mag niet worden gedaan, omdat als u WordPress bijwerkt, alle wijzigingen in de bestanden verloren gaan en u de integriteit van de kern ook niet kunt controleren met behulp van .

Wanneer u een add-on, thema of oplossing ontwikkelt, moet u wat tijd besteden aan het begrijpen van wat er binnen WordPress gebeurt. Hiervoor zijn veel handige debug-tools beschikbaar.

P.S.

Om automatisch verschillende rollen aan nieuwe gebruikers toe te wijzen, kunt u de plug-in Multisite User Management gebruiken.

Als u na het lezen van het artikel vragen of problemen heeft bij het maken van registratie- en activeringspagina's, laat dan een reactie achter en wij zullen zeker antwoorden.

27.03.2015 27.03.2015

WordPress-ontwikkelaar. Houdt van orde in alles en het begrijpen van nieuwe hulpmiddelen. Geïnspireerd door de Symfony-componentarchitectuur.

  • We maken onze eigen registratiepagina voor een multisite in plaats van de standaard wp-signup.php.

    In een typische WordPress-installatie wordt de registratiepagina (inloggen, wachtwoord opnieuw instellen) uitgevoerd door het bestand wp-login.php.

    • /wp-login.php - autorisatie
    • /wp-login.php?action=registreren - registratie
    • /wp-login.php?action=lostpassword - wachtwoord opnieuw instellen

    Er zijn aparte voorwaarden voor een multisite in wp-login.php. Dus wanneer u de link /wp-login.php?action=register op een multisite volgt, zal WordPress doorverwijzen naar de pagina /wp-signup.php. Veel thema's zorgen ervoor dat de pagina er niet erg aantrekkelijk uitziet, dus maken we er zelf een.

    Hoofdsite van het netwerk

    Standaard opent WordPress de registratiepagina (wp-signup.php) op het hoofddomein (site) van het netwerk. U kunt echter voor elke site in uw netwerk een aparte registratiepagina maken, ook als deze verschillende thema's heeft. We zullen het geval bekijken waarin alle sites in het netwerk hun eigen registratiepagina hebben, maar hetzelfde thema wordt gebruikt en de sites alleen qua taal verschillen. Als u verschillende thema's gebruikt, moet u meer code schrijven.

    functies.php?

    Nee. Deze bestandsnaam lijkt in elk artikel over WordPress vermeld te worden. In ons geval is het, gezien het feit dat de registratiefunctionaliteit voor meerdere sites is ontworpen, zinvol om deze op te nemen in MU-plug-ins, die worden geladen wanneer een site wordt geopend.

    Lyrische uitweiding

    Het is vermeldenswaard dat MU-plug-ins worden geladen vóór reguliere plug-ins en voordat de WordPress-kern volledig is geladen, dus het aanroepen van sommige functies kan tot fatale fouten in PHP leiden. Dergelijke “vroege” belading heeft ook zijn voordelen. Laten we zeggen dat je binnen elk thema niet kunt koppelen aan bepaalde acties die worden geactiveerd, zelfs voordat het function.php-bestand uit het thema is geladen. Een voorbeeld hiervan zijn de acties van de Jetpack-plug-in van het formulier jetpack_module_loaded_related-posts (related-posts is de naam van de module), met behulp waarvan het mogelijk is om de activiteit van modules in Jetpack te monitoren. Het is onmogelijk om vanuit het themabestand aan deze actie te 'koppelen', omdat de actie al is geactiveerd voordat het thema is geladen - plug-ins worden vóór de thema's geladen. U kunt het algemene beeld van de laadvolgorde van WordPress bekijken op de Action Reference-pagina in de codex.

    Bestandsvolgorde

    MU-plug-ins kunnen een willekeurig aantal bestanden en elke structuur bevatten die u logisch lijkt. Ik blijf bij zoiets als deze hiërarchie:

    |-mu-plugins |-|-load.php |-|-|-selena-netwerk |-|-|-|-aanmelden |-|-|-|-|-plugin.php |-|-|-| -|-... |-|-|-|-jetpack |-|-|-|-|-plugin.php

    Het load.php-bestand bevat alle benodigde “plug-ins” voor ons netwerk:

    // Laad vertalingen voor alle add-ons load_muplugin_textdomain ("selena_network", "/selena-network/talen/"); // Voor netwerkaanmelding is WPMU_PLUGIN_DIR vereist. "/selena-netwerk/signup/plugin.php"; // Nog een plug-in // vereist WPMU_PLUGIN_DIR ...

    In de map selena-network worden plug-inmappen opgeslagen, elk met zijn eigen plugin.php, die we opnemen in load.php. Dit geeft u flexibiliteit en de mogelijkheid om dingen snel aan en uit te zetten.

    Adres van registratiepagina

    Om het adres van de registratiepagina op te geven, gebruikt u het wp_signup_location filter. Het kan worden gevonden in het bestand wp-login.php en is verantwoordelijk voor de omleiding naar wp-signup.php.

    Case "register": if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); exit;

    Laten we onze functie toevoegen aan mu-plugins/selena-network/signup/plugin.php, die het adres van de registratiepagina op de huidige site zal retourneren:

    Functie selena_network_signup_page ($url) ( return home_url () . "/signup/"; ) add_filter ( "wp_signup_location", "selena_network_signup_page", 99);

    selena_network is het voorvoegsel dat ik gebruik in de namen van alle functies in MU-plug-ins op mijn site om botsingen te voorkomen. Het moet worden vervangen door uw eigen unieke voorvoegsel. De prioriteit van het toevoegen van een filter is 99, omdat sommige plug-ins, bijvoorbeeld bbPress en BuddyPress, dit adres kunnen overschrijven met hun eigen adres (MU-plug-ins laden eerder dan gewone plug-ins, zie hierboven). Merk op dat home_url() wordt gebruikt in plaats van network_site_url() om de bezoeker op hetzelfde domein te houden. Elke URL kan als adres worden gebruikt.

    Een pagina maken

    Laten we nu een pagina maken met het adres site.com/signup/ via de normale interface, en in de onderliggende themamap is de sjabloon voor onze nieuwe pagina page-signup.php. In plaats van het woord "aanmelden" kunt u een unieke ID gebruiken.

    Binnen de nieuwe sjabloon moet je de functie selena_network_signup_main() aanroepen, die het registratieformulier zal weergeven.

    Het is vermeldenswaard dat het hele sjabloonproces optioneel is en dat u in plaats daarvan uw eigen shortcode kunt maken die ook de functie selena_network_signup_main() aanroept.

    wp-signup.php en wp-activate.php

    Laten we nu een functie maken die het registratieformulier weergeeft. Kopieer hiervoor de bestanden wp-signup.php en wp-activate.php van de WordPress-root naar mu-plugings/selena-network/signup/ (en vergeet niet ze te verbinden binnen mu-plugins/selena-network /aanmelden/plugin.php). Verdere manipulaties met bestanden zijn uiterst moeilijk en lang te beschrijven, dus u zult ze zelf moeten doen. Ik zal alleen beschrijven wat er precies moet gebeuren en de bronbestanden van mijn project publiceren:

    1. Verwijder aan het begin van het bestand alle require , functieaanroepen en andere code buiten de functies.
    2. Hernoem alle functies door unieke voorvoegsels aan de namen toe te voegen.
    3. Verpak het onderste deel van de wp-signup.php-code in de selena_network_signup_main functie en schrijf helemaal aan het begin global $active_signup; .
    4. Vervang de lay-out op de juiste plaatsen door uw eigen lay-out.

    Binnen wp-activate.php moet je ongeveer hetzelfde doen:

    1. Verwijder alle code buiten de functies, verpak de lay-out in een aparte functie.
    2. Wijzig de indeling op plaatsen waar nodig.

    Het wp-activate.php-bestand is verantwoordelijk voor de accountactiveringspagina. Net als bij de registratiepagina moet u er een aparte sjabloon voor maken, waarin u de functie moet oproepen vanuit het bestand wp-activate.php.

    Activeringsbrieven versturen

    De registratiepagina stuurt de bezoeker een e-mail met een link om zijn account te activeren. Standaard wordt dit gedaan door de wpmu_signup_user_notification() functie uit het ms-functions.php bestand. U kunt de functionaliteit ervan lenen voor uw eigen functie. De reden om deze functie niet te gebruiken is omdat deze de accountactiveringslink van wp-activate.php verzendt. Je kunt deze functie “uitschakelen” met behulp van het wpmu_signup_user_notification-filter, waarbij je false retourneert (als dit niet gebeurt, wordt de activeringsbrief twee keer verzonden, oké, eigenlijk twee verschillende brieven).

    Functie armyofselenagomez_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // ... // Code van functie wpmu_signup_user_notification() wp_mail($user_email, wp_specialchars_decode($subject), $message, $message_headers) ; return false; ) add_filter("wpmu_signup_user_notification", "armyofselenagomez_wpmu_signup_user_notification", 10, 4);

    Als gevolg hiervan begon de registratiepagina in het Selena-thema er veel schoner en netter uit te zien.

    Conclusie

    Er zijn veel andere, niet erg correcte manieren op internet om hetzelfde te doen - Apache-omleidingen, AJAX-formulieren die niet werken zonder JavaScript, enz. Ik vond dit allemaal niet zo leuk, dus ik probeerde het zo correct te doen als mogelijk op mijn eigen website.

    Ik merk op dat je de bestanden zorgvuldig moet bewerken en moet proberen niet te veel af te wijken van de originele, zodat in de toekomst, als WordPress de bestanden wp-signup.php en wp-activate.php wijzigt, het gemakkelijker zal zijn om te vergelijken met elkaar om veranderingen te vinden.

    Vergeet niet naar de broncode van alle hierboven beschreven functies te kijken om volledig te begrijpen wat en hoe er in de code gebeurt.

    Bonus. Bescherming tegen spammers

    Zelfs de kleinste WordPress-sites worden vaak geplaagd door spamregistraties. Je kunt eindeloze voorwaarden schrijven voor het filteren van bots, vaak meer als een poging om kunstmatige intelligentie te creëren :) In het geval van een multisite heeft een regelmatige omleiding in Apache me enorm geholpen, met behulp waarvan ik om een ​​404 vroeg bij het openen / wp-signup.php en /wp-acitvate.php (ik ben geen expert in het configureren van Apache, dus mijn regels zijn misschien niet erg correct).

    RewriteEngine op RewriteBase / RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # BEGIN WordPress # We raken standaard de regels van WordPress niet aan :) # ... # EINDE WordPress

    P.S. Ik probeer sommige dingen van derden zo gedetailleerd mogelijk te beschrijven, want toen ik begon, was er soms niemand die veel dingen kon voorstellen en uitleggen. Ik geloof ook dat zulke kleine tips over andere materialen iemand zullen aanmoedigen iets nieuws te leren en zijn kennisgebied uit te breiden. RewriteRule-items gebruiken reguliere expressies, ze zijn helemaal niet ingewikkeld. Het ^-symbool betekent bijvoorbeeld het begin van een regel.

    Advertenties

    ln[-FFhinsv] bron_bestand [ doelbestand ] ln [-Ffhinsv] bron_bestand ... doelmap link bron_bestand doel_bestand Programma ln maakt een telefoonboekvermelding (link) aan met de naam, doelbestand. Op doelbestand dezelfde modi die zijn ingeschakeld bron_bestand. Met koppelingen kunt u meerdere exemplaren van hetzelfde bestand of dezelfde map op verschillende locaties hebben, zonder schijfruimte in beslag te nemen. Er zijn twee soorten links: harde links en symbolische links. Waar verwijst de link naar bron_bestand, hangt af van het type link.

    Het ln-commando heeft de volgende opties: -f If doelbestand bestaat al, verwijder deze dan zodat de link kan worden gemaakt. Deze optie overschrijft de optie -i. doelbestand-F Als bestaat al en is een map, verwijder deze zodat de link kan worden gemaakt. Optie-F -i gebruikt in combinatie met de -f of opties Als geen van deze is opgegeven, wordt de optie geïmpliceerd-F . Deze optie werkt niet zonder de optie-S doelbestand. doelmap-h Als Als geen van deze is opgegeven, wordt de optie geïmpliceerd of doelbestand is een symbolische link, volg deze niet. Deze optie is handig in combinatie met de optie ln om een ​​symbolische link te vervangen die naar een directory verwijst. doelbestand-i Interactieve modus. Als Als geen van deze is opgegeven, wordt de optie geïmpliceerd bestaat, wordt de gebruiker gevraagd om te verwijderen. zal verwijderen en zal een nieuwe link maken. Deze optie overschrijft de optie ln. ln. Standaard is het programma ln creëert een harde verbinding. Een harde link naar een bestand verschilt niet van het bronbestand, terwijl wijzigingen die in het bestand worden aangebracht niet afhankelijk zijn van de naam waarmee toegang werd verkregen. Harde links kunnen geen links naar mappen zijn en kunnen zich ook niet buiten een bepaald bestandssysteem bevinden. Een symbolische link bevat de naam van het bestand waaraan wordt gekoppeld. Bij het uitvoeren van een bewerking open(2) het originele bestand wordt boven de symbolische link gebruikt. Telefoongesprek stat(2) uitgevoerd op een symbolische link zal ook het originele bestand retourneren. Om informatie te krijgen over de link die u kunt gebruiken lstat(2). Om de inhoud van een symbolische link te lezen, kunt u de oproep gebruiken leeslink(2). In tegenstelling tot harde links kunnen symbolische links zich op een ander bestandssysteem bevinden en naar mappen verwijzen. Met een of twee argumenten kan het programma ln creëert een link naar een bestaande bron_bestand. De naam voor de link wordt uit het argument overgenomen doelbestand. Als er ruzie is doelbestand, de map waarin de link moet worden gemaakt is niet gespecificeerd, de huidige map wordt gebruikt, als alleen de map is opgegeven, wordt er een link gemaakt naar het laatste element uit bron_bestand. Met meer dan twee argumenten geeft het programma ln creëert koppelingen in doelmap naar alle opgegeven paden in bron_bestand. De links krijgen de namen van de bronbestanden. Als het programma ln, gebeld in het formulier link, er worden precies twee argumenten doorgegeven, de doorgegeven argumenten kunnen geen mappen zijn en er worden geen opties in deze vorm geaccepteerd. Dit is een eenvoudige vorm van gebruik. Compatibiliteitsopties zal verwijderen, -i, -N En -v, zijn bedoeld voor compatibiliteit met andere implementaties van het programma ln en worden niet aanbevolen voor gebruik in scripts. Optie bestaat al en is een map, verwijder deze zodat de link kan worden gemaakt. Optie is extra voor