Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu

Linki jednorazowe mogą być używane w różnych sytuacjach: w celu zapewnienia tymczasowego dostępu do pliku lub strony lub potwierdzenia rejestracji. W tej lekcji pokażemy, jak wygenerować i wdrażać jednorazowe adresy URL.

Tworzenie adresu URL.

Załóżmy, że nasza strona ma system uwierzytelniania użytkownika. Po rejestracji poprosimy użytkownika o przekazanie procedury weryfikacji e-mail. Aby utworzyć takie linki, możemy użyć specjalnego parametru tokena. Przykład takiego linku:

Http: //example.com/actvate? Token \u003d EE97780 ...

Bez bazy danych nie możemy tu zrobić, więc spójrzmy na stół, z którym będziemy pracować.

Utwórz tabelę Pendings_users (Token Char (40) Nie Null, Nazwa użytkownika Varchar (45) Nie Null, TStamp Integer Unsigned Nie Null, klucz podstawowy (Token);

W tabeli zapiszemy 3 pola: token, nazwa użytkownika i czas. Aby wygenerować token, użyjemy funkcji SHA1 (), co daje ciąg 40 znaków. Pole TStamp będzie przechowywać czas generowania tokena, abyśmy mogli śledzić linki z outdniejszym.

Istnieje wiele sposobów na wygenerowanie tokena, ale w tej lekcji użyjemy funkcji UNIQID () i SHA1 (). Niezależnie od sposobu generowania tokena, upewnij się, że wygenerowane wartości będą różne, a prawdopodobieństwo duplikatu jest minimalne.

$ token \u003d sha1 (uniqid ($ username, true));

Jako parametr funkcja UNIQID () przenosi ciąg, a wyjście zapewnia unikalny identyfikator na podstawie transmitowanego argumentu i aktualnego czasu. Również jako drugi argument, ta cecha Akceptuje wartość boolowską, którą Uniqid doda kilka dodatkowych znaków, aby zwiększyć prawdopodobieństwo wyjątkowości wartości. Funkcja Sha1 zajmuje unikalny identyfikator i tworzy Hash.

Po pracy na dwóch funkcjach będziemy mieć unikalny token, który może wygenerować adresy URL. Teraz musimy umieścić go w bazie danych:

$ Query \u003d $ DB-\u003e Przygotuj ("Wstaw do Pendings_users (nazwa użytkownika, Token, TStamp) wartości (?,?)"); $ Query-\u003e Execute (Array ($ Nazwa użytkownika, $ Token, $ _Server ["żądanie_time"]));

Abyśmy mogli wiedzieć, który użytkownik powinien być aktywowany, będziemy nagrywać i zalogować się do stołu. W przykładzie, bardziej przystosowany do prawdziwej strony internetowej, możesz użyć identyfikatora użytkownika.

Teraz, gdy mamy wszystkie niezbędne informacje, Możemy utworzyć tymczasowy adres URL:

$ url \u003d "http://example.com/activate.php?centen\u003d$Token";

$ Message \u003d.<<

Czek

Teraz potrzebujemy skryptu, dzięki czemu sprawdzimy. Wszystko, co musimy zrobić, to porównać żeton z adresu URL i żetonu z bazy. Jeśli jest coś takiego, a czas jego życia nie wygasł, to wszystko jest w porządku.

// Get If Token (Isset ($ _ Get ["Token"]) && Preg_match ("/ ^ (40) $ / i", $ _get ["Token"])) ($ Token \u003d $ _get ["Token" ];) $ Query-\u003e Execute (Array ($ Token)); $ Row \u003d $ Query-\u003e Fetch (PDO :: Fetch_assoc); $ Query-\u003e Closecursor (); Jeśli (rzędu $) (ekstrakt (rzędu $);) inaczej (rzuć nowy wyjątek ("Tocken jest nieprawidłowy");) // aktywuj konto użytkownika // ... // Usuń token z podstawy $ zapytania \u003d $ DB\u003e Przygotuj ("Usuń z wtórnych_userów, gdzie nazwa użytkownika \u003d? I token \u003d? I TStamp \u003d?",); $ Query-\u003e Execute (Array ($ Nazwa użytkownika, $ Token, $ Tstamp));

Musimy również zapewnić testowanie żetonów, których życie wygasło:

// 1 dzień w sekundach \u003d 60 sekund * 60 minut * 24 godziny $ Delta \u003d 86400; // Sprawdź, czy ($ _Server ["żądanie_time"] - $ TStamp\u003e $ delta) (rzuć nowy wyjątek ("Token Lifetime wygasł");) // aktywuj konto niestandardowe // ...

W ten sposób będziemy mieli dwie kontrole: jeden na ważności tokena, drugi w momencie jego istnienia.

Wynik

Ta metoda może być stosowana nie tylko do aktywacji konta Użytkownicy, ale także w innych potrzebach: na przykład, aby zapewnić pojedynczy lub tymczasowy dostęp do zasobu lub usługi.

Oprócz tego wszystkiego możesz utworzyć skrypt, który usunie żetony, które nigdy nie były używane. Ten skrypt można uruchomić od czasu do czasu lub ubiegać się o to Cron.

Tematy są zwykle nie funkcjonalne, ale czasami my, deweloperzy, musisz wprowadzić pewne możliwości w naszym temacie, aby był trochę lepszy i wygodniejszy.

W tym przewodniku rozważymy termin "terytorium wtyczek", a także dowiedzieć się, jak korzystać z fantastycznego narzędzia napisanego przez Thomasa Griffina: biblioteki aktywacji wtyczki TGM.

Funkcjonalność tematu: Inwazja na terytorium wtyczek

Tematy są zaprojektowane, aby zmienić projekt witryny WordPress. Idealnie, temat powinien wpływać tylko na aspekt wizualny. Jednak w naszym "złotym wieku" programistom Wordpress często obejmują funkcje funkcjonalne w swoich tematy, które pozwalają na utrzymanie konkurencyjności na rynku.

Jest to inwazja na terytorium wtyczek. Możemy przedstawić "terytorium wtyczek" jako niektóre funkcjonalne sekcje kodu. Każda fragment kodu Zmiana funkcjonalności witryny musi być reprezentowana jako wtyczka, jeśli określony kod nie jest położony w jądrze WordPress.

Sformułowałem już wcześniej w jednym z moich artykułów Empiryczne wtyczki terytorialne:

Jeśli specyfika jest związana z wizualną reprezentacją witryny, w tym przypadku w tym przypadku powinna być uwzględniona w temacie; Jeśli jest to związane z funkcjonalnością, musi być reprezentowany jako oddzielna wtyczka.

Dość prosta reguła. Ludzie nadal próbują zarejestrować się na poziomie kodu fragmentów funkcjonalnych w swoich tematach, ale katalogi tematów (takich jak Wordpress.org lub ThemeEforest) nie przyjmują tematów, które atakują terytorium wtyczek. W ten sposób propozycja funkcjonalności w tematych stała się pewnym problemem.

Na szczęście istnieje proste rozwiązanie, które nie przechodzi przeciwko regułom "terytorium wtyczek".

Wprowadzenie do biblioteki aktywacji wtyczki TGM

Ustawianie aktywacji wtyczki TGM

Zwróć uwagę na funkcję TGMPA () z dwoma parametrami na samym końcu kodu. Drugim parametrem jest zmienna $ CONFIG, która jest również tablicą, jak $ wtyczki. W następujący sposób, z jego nazwy możesz skonfigurować bibliotekę aktywacji wtyczki TGM tego masywu.. Zmienna akceptuje własny zestaw opcji:

  • iD (string) to unikalny identyfikator biblioteki aktywacji wtyczki TGM w temacie. Jest to bardzo ważne: jeśli inne wtyczki również stosują aktywację wtyczki TGM, różne identyfikatory zapobiegają możliwym konfliktom.
  • default_path (string) - domyślna bezwzględna ścieżka do wtyczek w temacie. Po zainstalowaniu go możesz użyć nazwy pliku ZIP jako wartości parametru źródła dla wtyczki.
  • menu (string) - menu menu do instalacji wtyczek.
  • has_notices (Boolean) - W przypadku określonych w prawdziwych, powiadomienia administracyjne zostaną wystawione na wymagane / zalecane wtyczki.
  • odmowa (Boolean) - jeśli jest określona w TRUE, użytkownik może "zamknąć" powiadomienia.
  • dismiss_msg (ciąg) - Jeśli opcja Divencible jest ustawiona na false, ta wiadomość zostanie wyświetlona powyżej powiadomienia administratora.
  • is_automatic (Boolean) - W przypadku określonego w true, wtyczki zostaną aktywowane po uzgodnieniu użytkownikowi, aby je zainstalować.
  • wiadomość (ciąg) - dodatkowy HTML, wyświetlany przed tabelą wtyczki.
  • struny (tablica) - tablica zawiera wyświetlane wiadomości. Możesz je ustawić jako linie transmisji. Spójrz na plik example.php, aby zobaczyć pełna lista Wszystkie posty.
"Mytheme-TgMpa", // Twój unikalny identyfikator TGMPA "Default_path" \u003d\u003e Get_styleshEEEEET_DiRectory (). "/ lib / wtyczki /", // Domyślna ścieżka bezwzględna "Menu" \u003d\u003e "Wtyczki wymagane przez MITTHEME-INSTALT-wymagane", // MENU SLIG "HAS_NOTICES" \u003d\u003e True, // Pokaż powiadomienia administracyjne "Dismalable" \u003d\u003e False , // ogłoszenia nie są lekceważalne "DISPISS_MSG" \u003d\u003e "Naprawdę, naprawdę potrzebujesz zainstalowania tych wtyczek, dobrze?", // Ten komunikat zostanie wyświetlany na górze Nag "is_automatic" \u003d\u003e true, // automatycznie Aktywuj wtyczki po instalacji "Wiadomość" \u003d\u003e ""// Wiadomość do wyjścia tuż przed tabelą wtyczek" Struny "\u003d\u003e Array (); // tablica ciążeń komunikatów, które używa aktywacji wtyczki TGM);?\u003e

Wniosek

Jak widać, zaproponuj funkcjonalność themes Wordpress. Być może - po prostu musisz najpierw pomyśleć o użytkownikach, którzy mogą przełączać się z jednego tematu do drugiego. Biblioteka aktywacji wtyczki TGM oferuje naprawdę inteligentny sposób.

Co myślisz o tym narzędzia? Czy kiedykolwiek go użyłeś, czy planujesz go używać w przyszłości? Podziel się swoimi myślami!

Utwórz własną stronę rejestracyjną dla Multisite zamiast Standard WP-Signup.php.

W zwykłej instalacji Strona WordPress. Rejestracja (autoryzacja, resetowanie hasła) Wyświetla plik WP-Login.php.

  • /wp-login.php - autoryzacja.
  • /wp-login.php?action\u003dregister - Rejestracja
  • /wp-login.php?action\u003dlostpassword - Resetowanie hasła

Dla multisite w WP-Login.php są osobne warunki. Po kliknięciu link /wp-login.php?action\u003dregister na MultiSaite WordPress dokona przekierowania na stronę /wp-signup.php. W wielu tematach strona nie wygląda zbyt atrakcyjne, więc będziemy mieli własne.

Główna sieć stron internetowych.

Domyślnie WordPress otwiera stronę rejestracji (WP-Signup.php) na sieci głównej (strona internetowa). Możesz jednak wykonać oddzielną stronę rejestracyjną dla każdej witryny sieciowej, nawet jeśli mają różne tematy. Rozważymy sprawę, gdy we wszystkich witrynach sieciowych posiadamy własną stronę rejestracyjną, ale ten sam temat jest używany i witryny różnią się tylko w języku. Jeśli używane są różne tematy, musisz napisać więcej kodu.

funkcje.php?

Nie. Nazwa tego pliku wydaje się być wymieniona w dowolnym artykule o WordPress. W naszym przypadku, biorąc pod uwagę fakt, że funkcjonalność rejestracji jest zaprojektowana dla kilku witryn, ma sens, aby wziąć go do wtyczek Mu, które są ładowane podczas otwierania dowolnej witryny.

Lyrical Digression.

Warto zauważyć, że wtyczki Mu są ładowane wcześniej niż zwykłe wtyczki, a dopóki jądro WordPress jest w pełni załadowany, więc połączenie dla niektórych funkcji może prowadzić do fatalne błędy W PHP. Podobnie "wczesne" pobieranie ma swoje zalety. Powiedzmy w każdym tematu, nie może być trzymaj się pewnych działań, które są wywołane przed pobraniem pliku funkcji.php z tematu. Przykładem tego może służyć jako wtyczkę wtyczkę Jetpack_module_loaded_Related (pokrewne - nazwa modułu), z którym można śledzić aktywność modułów w Jetpack. Niemożliwe jest "sprzęgło" z pliku tematu do tej akcji, ponieważ akcja już działała przed załadowaniem tematu - wtyczki są ładowane wcześniej. Aby spojrzeć na wspólny obraz kolejności rozruchu WordPress na stronie odniesienia do działania w kodzie.

Zamów w plikach.

Mu-wtyczki mogą zawierać dowolną liczbę plików i dowolnego wykresu, który wydaje się logiczne. Przestrzegam takiej hierarchii:

| -Mu-wtyczki | - | ładunek.php | - | - | | Selena-Network | - | - | - | - -Signup | - | - | - | - | --plugin.php | - | - | - | - | -... | - | - | - | -Jetpack | - | - | - | - | - --Plugin.php

W pliku Load.php wszystkie niezbędne "wtyczki" są podłączone do naszej sieci:

Ładować traslaci dla wszystkich dodatków Load_muplugin_Textdomain ("Selena_network", "/ Selena-Network / Languages \u200b\u200b/"); // Sieć Zarejestruj się wymagać wpmu_plugin_dir. "/selena-network/signup/plugin.php"; // kolejne wtyczki // wymaga wpmu_plugin_dir ...

Wewnątrz folderu Selena-Network foldery wtykowe są przechowywane, każdy ma własną wtyczkę.php, którą podłączamy na LOAD.PHP. Daje elastyczność i możliwość szybkiego wyłączania i obejmować niektóre rzeczy.

Adres strony rejestracyjnej

Aby określić adres strony rejestracyjnej, użyj filtra WP_Signup_location. Można go znaleźć w pliku WP-Login.php i jest on odpowiedzialny za przekierowanie na WP-Signup.php.

Przypadek "Zarejestruj się": IF (IS_Multisite ()) (WP_Redirect (Stosować_Filatory ("WP_Signup_Lokalizacja", Network_site_url ("WP-Signup.php"))); Wyjście;

Dodaj swoją funkcję w Mu-Pluins / Selena-Network / Signup / Plugin.php, który podaje adres strony rejestracyjnej na bieżącej stronie internetowej:

Funkcja Selena_network_Signup_page ($ URL) (Return Home_url (). "/ Signup /";) Dodaj_filter ("WP_Signup_location", "Selena_network_signup_page", 99);

selena_network - prefiks, którego używam w nazwach wszystkich funkcji wewnątrz wtyczek Mu-wtyczki na mojej stronie, aby uniknąć konfliktów, należy zastąpić własnym unikalnym prefiksem. Priorytet dodania filtra 99, ponieważ niektóre wtyczki, takie jak BBPRESS i Buddypress, mogą nadpisać ten adres do własnych (wtyczki Mu są ładowane wcześniej niż konwencjonalne wtyczki, patrz powyżej). Należy pamiętać, że używany jest dom_url () zamiast sieci_site_url (), aby opuścić odwiedzający w tej samej domenie. Możesz użyć dowolnego adresu URL jako adresu.

Tworzenie strony.

Teraz utworzmy stronę z witryną.com/signup/ za pomocą regularnego interfejsu, aw szablonie folderu podmiotu dla naszej nowej strony - Strona-rejestracja.php. Zamiast słowa "Zarejestruj się" możesz użyć unikalnego identyfikatora.

Wewnątrz nowego szablonu należy zadzwonić do funkcji Selena_network_Signup_main (), która wyświetli formularz rejestracyjny.

Warto zauważyć, że cały proces z szablonami nie jest wymagany, a zamiast tego możesz utworzyć własny skrót, który również zadzwonić do funkcji Selena_network_signup_main ().

wP-Signup.php i WP-Activate.php

Teraz utworzymy funkcję, która wyświetli formularz rejestracyjny. Aby to zrobić, skopiuj pliki WP-Signup.php i WP-Activate.php z głównego WordPress w Mu-Plulins / Selena-Network / Signup / (i nie zapomnij połączyć je wewnątrz Mu-Plugins / Selena-Network / Zarejestruj / Plugin.php). Dalsze manipulacje z plikami są niezwykle trudne i długie do opisania, więc przychodzisz ich sam. Opiszę tylko, co wymaga wykonania i publikowania plików źródłowych projektu:

  1. Na początku pliku usuń wszystkie wymagania, funkcje wywołujące i inne funkcje zewnętrzne.
  2. Zmień nazwę wszystkich funkcji, dodając unikalne prefiksy do nazw.
  3. Dolna część kodu WP-Signup.php jest zawinięta do funkcji Selena_network_Signup_main, a jego samotnie pisać globalny $ Active_Signup; .
  4. Wymień układ na własnych miejscach.

Wewnątrz WP-Activate.php musisz zrobić to samo:

  1. Usuń wszystkie funkcje zewnętrzne, owinąć układ w oddzielną funkcję.
  2. Zmień układ w miejscach, w których jest to konieczne.

Plik WP-Activate.php jest odpowiedzialny za stronę aktywacji konta. Podobnie jak w przypadku strony rejestracji, musisz utworzyć oddzielny szablon wewnątrz, który należy zadzwonić do funkcji z pliku WP-Activate.php.

Wysyłamy litery aktywacji

Strona rejestracyjna wysyła list do gościa w odniesieniu do aktywacji konta. Domyślnie jest to funkcja WPMU_SIGNUP_USER_Notification () z pliku MS-Functions.php. Jego funkcjonalność można pożyczyć za jego funkcję. Powód, dla którego chcesz odmówić użycia tej funkcji - wysyła odniesienie do aktywacji konta z WP-Activate.php. Można wyłączyć tę funkcję za pomocą filtra WPMU_Signup_user_Notification, przesuwając false na nim (jeśli nie ma to nic zrobić, list aktywacyjny zostanie wysłany dwukrotnie, W porządku, w rzeczywistości dwa różne litery).

Funkcja armyofselenagomez_wpmu_signup_user_notification ($ Użytkownik, $__mail, $ Key, $ Meta \u003d tablica ()) (// ... // Kod z WPMU_Signup_user_Notification () Funkcja WP_mail ($ user_usail, wp_specialchars_decode ($ Temat), $ Wiadomość, $ Message_Headers ); Zwróć false;) add_filter ("wpmu_signup_user_notification", "armyofselegenagomez_wpmu_signup_user_Notification", 10, 4);

W rezultacie strona rejestracyjna w temacie Seleny zaczęła wyglądać znacznie czyszczenia i ostrożnie.

Wniosek

W Internecie wiele innych nie jest zbyt właściwy sposób Jak dokonać tego samego - Apache przekierowanie, formularze AJAX, które nie będą działać bez skryptu Java, itd. Naprawdę nie podoba mi się to bardzo, więc starałem się to zrobić najbardziej poprawnie na własną stronę.

Należy pamiętać, że pliki edycji powinny być starannie i starają się nie odsuwać od źródła do RankneSh, jeśli WordPress zmienia pliki WP-Signup.php i WP-Activate.php, były łatwiejsze do porównania ich do znalezienia zmian .

Nie zapomnij spojrzeć źródło Wszystkie funkcje opisane powyżej w celu pełnego rozwiązania tego, co i co dzieje się w kodzie.

Premia. Ochrona przed spamerami

Nawet najmłodsze miejsca na WordPress często podlegają rejestracji spamu. Możesz napisać niekończące się warunki do filtrowania botów, często bardziej podobnych do utworzenia sztuczna inteligencja 🙂 W przypadku wielowarstwa, regularny przekierowanie w Apache pomógł mi, z którymi podczas otwierania /wp-signup.php i /wp-acitvate.php poprosiłem o wydanie 404 (nie jestem ekspertem w konfiguracji Apache, więc mój Zasady mogą nie być bardzo poprawne).

Revriteengine na przepisywaniu / rewritereule ^ WP-Signup \\ HP - Rewriterule ^ WP-Activate \\ gwiazdek

P. S. Staram się opisać pewne rzeczy trzecich jak najwięcej jak najwięcej, ponieważ kiedy zacząłem, czasami było jakoś powiedzieć i wyjaśnić wiele rzeczy. Wierzę również, że podobne małe wskazówki dotyczące innych materiałów, które zostaną popychane do badania czegoś nowego i rozszerzającego ich dziedzinę wiedzy. Wyrażenia regularne są używane w rekordach Reriterule, nie są one całkowicie złożone, na przykład, symbol ^ oznacza początek linii.

Rejestruje funkcję, która zostanie wyzwolona podczas aktywacji wtyczki.

Ta funkcja mocuje określoną funkcję zwrotnej do haka aktywnego_ (wtyczka) i jest owijarka dla tego haka.

(Wtyczka) w aktywacji haka_ (wtyczka) zastępuje nazwę względnego pozwala na główny plik wtykowy. Na przykład, jeśli znajduje się wtyczka: WP-Content / Pluce / SamplePlugin / Sample.php, a następnie nazwa haczyka będzie: aktywna_sampleplugin / próbki.php.

Z wersji 3.1. Hak działa tylko podczas aktywacji wtyczki i nie działa podczas automatyczna aktualizacja podłącz.

Jak to działa

Wtyczka jest aktywowana przez funkcję ACTIVATE_PLUGIN (), w której wyzwala się hak aktywny_ (wtyczka).

Funkcja Activate_plugin () w jądrze jest wywoływana już po załadowaniu medium VP. Ta funkcja łączy plik Master Plug-in (i wszystko, co jest określone w nim), a następnie przez haczyk aktywuje określoną funkcję wywołania zwrotnego. Dzięki temu wszystkie funkcje i klasy wtyczki są dostępne w naszej funkcji wywołania zwrotnego. Ale ponieważ wszystkie główne haczyki WP już działały podczas rozruchu EN Medium, wtedy nie są zawieszone na haczykach, na przykład wtyczki_loade, nie działa już podczas podłączania głównego pliku wtykowego. Więc nasza wtyczka zostanie podłączona, ale nie całkowicie: nie tak, jak powinien się połączyć, gdy już aktywowano.

Na przykład, jeśli wtyczka robi wszystko podczas imprezy wtyczek_loade, a następnie wszystkie te działania po prostu nie zdarzają się, gdy aktywacja wtyczki. Na przykład, jeśli łączy plik tłumaczenia, plik tłumaczenia nie będzie podłączony w momencie wyzwolenia funkcji wywołania zwrotnego określonego dla rejestracji_action_hook ().

Z reguły, po uruchomieniu funkcji wywołania zwrotnego, istnieje 2 zdarzenia, aby zawiesić funkcje: aktywowany_plugin i wyłączenie.

Aby zrobić coś niezwykłego, gdy wtyczka jest aktywna, patrz przykład 5.

Warunki korzystania

Funkcja nie będzie działać, jeśli nazywasz go w momencie haczyka, na przykład, plugins_loaded, init. Funkcja musi być wywołana bezpośrednio z pliku głównego wtyczki. Reguły aktywacji:

    register_action_hook () należy wywołać z pliku Master Plugin, z którego znajduje się dyrektywa wtyczce: ... i nie należy nazwać żadnym haczykiem, podobnie jak wtyczki_loade lub init.

    Funkcja hakowa powinna znajdować się w tym samym pliku, co haczyk lub połączyć z wyprzedzeniem z innego pliku.

    Funkcja haka nie działa na ekranie (echo). Ponieważ odbywają się przekierowanie i echo. Ale możesz użyć Die ().

  1. Zmienne globalne (jeśli istnieją) muszą być określone wyraźnie, aby uzyskać dostęp do nich z funkcji haku.

Uwagi dotyczące obszaru zmiennych

Podczas aktywowania wtyczki główny plik wtykowy nie jest podłączony do obszaru globalnego, ale wewnątrz funkcji Activate_plugin (). Dlatego zmienne, które jako zwykły tryb Praca wtyczki jest uważana za globalną, nie będzie globalny.

Tak więc, funkcja używana w Register_action_hook () może nie zobaczyć zmiennych globalnych, nawet jeśli zadeklarowałeś je jako globalne w tej funkcji. Przykład:

$ Myvar \u003d "coś"; Register_action_hook (__ Plik__, "myplugin_activate"); Funkcja myplugin_active () (Global $ myvar; echo $ myvar; // zmienna nie jest równa "coś")

Z powodu tej funkcji należy zawsze określić zmienne globalne. Wszystkie zmienne globalne muszą być zdefiniowane jako globalne, nawet jeśli zmienna jest wskazana w korpusie wtyczki. Tylko w tym przypadku będzie dostęp do nich w dowolnym miejscu. Przykład:

Globalny $ myvar; // wskazać wyraźnie, że jest to zmienna globalna $ myvar \u003d "coś"; Register_action_hook (__ Plik__, "myplugin_activate"); Funkcja myPlugin_active () (Global $ myvar; echo $ myvar; //\u003e coś)

Bez haczyków.

Zwroty

zERO. Nic nie powraca.

Za pomocą

zarejestruj się_action_hook ($ File, $ Funkcja); $ plik. (ciąg) (wymagany) Droga do głównej rzeczy plik PHP. Wtyczka, w tym nazwa samej wtyczki. Zazwyczaj używany magiczną stałą PHP ___FILE__. $ Funkcja. (linia / array / lambda) (wymagana)

Nazwa funkcji wywołania zwrotnego. Dla klas użyj tablicy: tablica ($ to, "nazwa funkcji"); .

Funkcja otrzyma zmienną logiczną $ Network_wide - czy wtyczka jest aktywowana dla całej sieci witryn, z Multisaite.

Przykłady.

#jeden. Uruchamianie funkcji podczas aktywowania wtyczki

Przypuszczamy, że mamy funkcję My_Plugin_activate () w głównym pliku wtyczki: WP-zawartość / wtyczki / myplugin / myplugin.php, a następnie uruchomić tę funkcję podczas aktywacji wtyczki, użyj takiego kodu:

Rejestracja_aktywna_hook (__ plik__, "my_plugin_active"); Funkcja my_plugin_activate () (// kod aktywacyjny ...)

# 2. Uruchamianie metody klasy

Jeśli wtyczka używa klasy PHP, kod aktywacyjny dodaje się jako:

Register_action_hook (__ plik__, tablica ("my_plugin", "install")); Klasa My_Plugin (instalacja funkcji statycznej () (// nie tworzyć żadnych wyjść tutaj ...))

# 3. Uruchom metodę klasy z osobnego pliku

Jeśli klasa zawierająca funkcję aktywacji jest w środku oddzielny plikNastępnie zarejestruj funkcję aktywacji w następujący sposób:

Dołącz_once __dir__. "/class-my_plugin.php"; Register_action_hook (__ plik__, tablica ("my_plugin", "on_activate_function"));

#. Uruchom klasę klasy z klasy

Jeśli jesteś w środku __construct (). Ważne, __file__ powinien "wyglądać" do pliku wtyczki głównej:

Rejestracja_aktywna_hook (__ file__, tablica ($ to, "your_method_name"));

# 5 Zrób wszystko natychmiast po aktywacji wtyczki

Po aktywacji wtyczki wyzwalane są tylko dwa haczyki: aktywowane_plingin i wyłączanie.

Kiedy musisz zrobić coś natychmiast po aktywowaniu wtyczki, możesz dołączyć do nich funkcję.

Gdy to rozwiązanie nie jest odpowiednie, możesz użyć opcji WP: Zapisz dane w opcji, a następnie sprawdzić dostępność opcji i zrób coś, jeśli opcja jest:

// główny plik wtykowy. ... Funkcja My_Plugin_activate () (// Dodaj opcję, jeśli ma to zrobić wszystko. Add_option ("ACTIVATED_PLUGIN", "Wtyczka-ślimak"); // tutaj kod aktywacyjny ...) Zarejestruj się_Activation_hook (__ plik_, " my_plugin_activate "); Funkcja LOAD_PLUGIN () (IF (IS_ADMIN () && Get_option ("ACTIVATED_PLUGIN") \u003d\u003d "Wtyczka-ślimak") (// Usuń opcję dodaną, aby nie działa już, a nie działa ... Delete_option ("Aktywowany_plugin"); // Zrób wszystko raz, po aktywacji wtyczki // na przykład: add_action ("init", "my_init_function");)) add_action ("admin_init", "LOAD_PLUGIN", "LOAD_PLUGIN");

Inna opcja zrobić coś podczas aktywacji wtyczki jest stworzenie własnego wydarzenia:

Funkcja My_Plugin_activate () (// Zainstaluj haczyk, aby można było przejść do siebie z samej wtyczki do_akcji ("my_plugin_active");) rejestracja_aktywnie_hook (__ plik__, "my_Plugin_active");

# 6 Kolejna demonstracja korzystania z funkcji

Mała wtyczka pokazująca, jak korzystać z funkcji:

/ * Nazwa wtyczki: Opis testowy: Test * / Wage_once Dirname (__ Plik__). "/my_ther_file.php"; / * Ten kod nie będzie działał. Hak aktywacyjny powinien być wywołany z głównego pliku. Rejestracja_action_hook (dirname (__ file__). "/My_other_file.php", "my_other_function"); * / // Jest to kod pracy. Register_action_hook (__ plik__, "test_aktywowany"); / * Jest to poprawna opcja ogłoszenia i dostęp do zmiennych globalnych. Zmienne globalne powinny być wyraźnie zadeklarowane. Bez tego nie będziesz miał do nich dostępu. * / global $ some_var; $ some_var \u003d "hej"; // Funkcja Test_active () (opcja nie będzie działać. Jeśli trzeba nagrywać dzienniki do pliku tymczasowego, użyj Fopen / FWrite. Jeśli chcesz sprawdzić, czy hak działa aktywacyjny, użyj wyjścia () w funkcji haku. * / Echo "test_aktywowany!";)

Umożliwia korzystanie z jednego ustawienia WordPress dla wielu witryn w tym samym czasie. Jednocześnie każda strona otrzymuje własne stoły w bazie danych z unikalnym prefiksem.

Tabele z danymi zarejestrowanych użytkowników wspólnych dla wszystkich witryn sieciowych. Jest to pewien plus i rejestracja pewnego dnia możesz uzyskać dostęp do wielu witryn. Ponadto w każdej witrynie, to samo konto może mieć różne prawa. Na przykład, w jednym miejscu użytkownik może być redaktorem i innym administratorom.

W zwykłym instalacja WordPress. Resetowanie rejestracji, autoryzacji i hasła Wyświetla plik WP-Login.php.

  • wP-Login.php - Autoryzacja
  • wp-login.php? Akcja \u003d rejestracja - rejestracja
  • wp-login.php? Action \u003d Lostippassword - Resetowanie hasła

W trybie multisite, jądro WordPress zaczyna zachowywać się nieco inaczej i podczas przełączenia się na link WP-Login.php? Action \u003d Rejestracja otrzyma przekierowanie na WP-Signup.php. Jest to strona rejestracyjna sieci, która jest domyślna w WordPress.

Oprócz rejestracji zwykłych kont użytkowników, możesz utworzyć nową stronę na nim, jeśli SuperMinistrator umożliwił taką okazję w ustawieniach sieciowych (ustawienia sieciowe).

W większości tematów strona rejestracji nie wygląda zbyt dobrze. Wiele motywów jest wykorzystywane przez ramy CSS, takie jak Bootstrap, a ich własne zajęcia specyficzne dla stylizacji różnych elementów na stronach, więc trudno jest napisać pojedynczy HTML, który będzie odpowiedni dla każdego.

Ale nie powinieneś rozpaczać, jeśli strona wygląda nieporządnie. Plik WP-Signup.php jest na początku świetny, gdy nie ma czasu, aby wypracować każdą część witryny - możesz skupić się na innych ważniejszych stronach i treściach.

Gdy będziesz gotowy zrobić własną stronę rejestracyjną, WP-Signup.php będzie dobrą próbą i przykładem, który jest łatwy do zrozumienia widma funkcji, które WordPress zapewnia przetwarzanie i sprawdzanie danych wprowadzonych przez użytkowników i tworzyć nowe konta.

Główna sieć stron internetowych.

Domyślnie WordPress otwiera stronę rejestracji (WP-Signup.php) na sieci głównej (strona internetowa). Niemniej jednak można tworzyć strony rejestracyjne dla każdej witryny sieciowej, nawet jeśli mają tematy.

Rozważymy sprawę, gdy jeden temat jest używany na wszystkich witrynach sieciowych, ale na każdym z nich znajduje się strona rejestracyjna. Witryny różnią się językiem (angielski i rosyjski), więc strona rejestracji zostanie wyświetlona na stronie "ojczystym". Jeśli witryny korzystają z różnych tematów, wszystko będzie zależało od tego, jakie tematy będą odpowiadać im ten sam układ (doskonała sytuacja, która może wcisnąć Cię, aby ujednolicić wszystkie swoje tematy) lub warto opracować strony indywidualnie.

Alternatywa dla funkcji.php.

Zamów w plikach.

Mu-wtyczki mogą zawierać dowolną liczbę plików i strukturę, która wydaje Ci logiczna. Przestrzegam takiej hierarchii:

|. Mu-wtyczki | |. Load.php |. |. Selena-Sieć | |. |. Zarejestruj się | |. |. |. Plugin.php |. |. |. ... |. |. |. Jetpack |. |. |. |. plugin.php.

W pliku Load.php, tłumaczenia i wszystkie niezbędne "wtyczki" są połączone:

// Ładowanie transferów dla Mu-wtyczek LOAD_MUPLUGIN_TEXTDOMAIN ("Selena_network", "/ Selena-Network / Languages \u200b\u200b/"); // Funkcjonalna strona rejestracyjna wymaga wpamu_plugin_dir. "/selena-network/signup/plugin.php"; // inna plugin // wymaga wpamu_plugin_dir ...

Wewnątrz katalogu Selena-Network foldery wtykowe są przechowywane. Każdy ma własną wtyczkę.php, którą podłączamy na LOAD.PHP. Daje to elastyczność i zdolność do wyłączania i dołączenia poszczególnych elementów w projekcie roboczym w nagłych przypadkach.

Strona rejestracyjna

Po zrozumieniu, gdzie i jak będziemy napisać kod, możesz przejść do utworzenia strony rejestracji.

Utwórz stronę z przykładem.org/Signup/ przez zwykły interfejs. Jako adres można użyć dowolnego adresu URL, który wydaje się odpowiedni dla Twojego projektu.

Przekieruj do żądanej strony rejestracyjnej

Aby WordPress rozpoznał o naszym nowa strona Rejestracja i dokonano ponownego przekierowania, przy kliknięciu linku "Zarejestruj", użyj filtra WP_Signup_location. Można go znaleźć w WP-Login.php i jest on odpowiedzialny za przekierowanie na domyślnym wp-Signup.php.

Przypadek "Zarejestruj się": IF (IS_Multisite ()) (WP_REDIRECT (Zastosuj_Filters ("wp_signup_Location", Network_site_url ("WP-Signup.php"))); Wyjście; // ...

Jak pamiętasz domyślnie strona rejestracyjna otwiera się w głównej domenie sieci. Dlatego tu używany jest sieć_site_url ().

Dodaj przewóz filtra do Mu-Plugins / Selena-Network / Signup / Plugin.php, który otrzymasz adres strony rejestracyjnej w bieżącym miejscu:

Funkcja Selena_network_signup_page ($ URL);) Dodaj_filter ("wp_signup_location", "Selena_network_signup_page", 99);

selena_network - prefiks, którego używam w nazwach wszystkich funkcji wewnątrz wtyczek Mu-wtyczki na mojej stronie, aby uniknąć konfliktów, należy zastąpić własnym unikalnym prefiksem. Priorytet dodania filtra 99, ponieważ niektóre wtyczki, takie jak BBPRESS i Buddypress, mogą nadpisać ten adres do własnych (wtyczki Mu są ładowane wcześniej niż konwencjonalne wtyczki, patrz powyżej).

Należy pamiętać, że jest używany, który w przeciwieństwie do sieci_site_url (), podaje adres bieżącego witryny, a nie głównej witryny sieciowej.

WP-Signup.php Funkcjonalność

Plik WP-Signup.php zawiera dużą liczbę funkcji i kodu. Aby zobaczyć zdjęcie jako całość, możesz użyć kodu składania. Z reguły w języku angielskim jest nazywany "składanym kodem".

Na początku pliku od 1 do 80 linia (w wersji 4.1.1), różne czeki są wykonane i wytwarzanie strony "Start" za pomocą Get_header ().

Następnie zadeklarowano wiele metod i przed rozpoczęciem pracy z nimi, warto zrozumieć, co sprawia, że \u200b\u200bkażda funkcja. Wewnątrz wielu z nich jest często używanych innych funkcji z prefiksem WPMU_, wszystkie z nich są zadeklarowane w pliku WP-Cali / MS-Functions.php. Ta sekcja jest trudna do zrozumienia, nie widząc kodu siebie. Poniżej mały opis podstawowe funkcje w przypadku, gdy masz trudności.

  • wPMU_SIGNUP_Stylesheet () - Wyjście dodatkowych CSS na stronie rejestracji.
  • show_blog_form () - pola do rejestracji witryny (adres, widoczność nazwy dla wyszukiwarek).
  • walidate_blog_Form () - Sprawdzanie wprowadzonego adresu witryny i nazwy za pomocą wpmu_validate_blog_signup ().
  • show_user_form () - pola do rejestracji użytkownika (logowanie i adres e-mail).
  • validate_user_form () - sprawdzenie wprowadzonego logowania i adresy. Poczta z WPMU_Validate_user_Signup ().
  • signup_another_blog () - pola do rejestracji nowych witryn za pomocą show_blog_form () dla użytkowników, którzy są już zarejestrowani na stronie.
  • walidate_another_blog_signup () - sprawdza adres witryny i nazwę za pomocą VentaTate_blog_form ().
  • signup_user () jest główną funkcją do wyjścia strony strony rejestracyjnej.
  • validate_user_signup () - sprawdza login i adres e-mail. Poczta z Validate_user_Form ().
  • signup_blog () - Pola do wprowadzania adresu, nazwy i widoczności witryny (drugi krok rejestracji) przy użyciu show_blog_form ().
  • walidate_blog_signup () - sprawdza login, adres e-mail. Poczta, adres i nazwa strony.

Na samym dole pliku WP-Signup.php (z 646 szwów w wersji 4.1.1), główną logiką strony rejestracyjnej, która wykorzystuje powyższe metody. Ta część kodu nie jest przesyłana do funkcji. Na końcu Get_footer () jest nazywany.

Skopiuj funkcjonalne WP-Signup.php

Następnie opisano procedurę kopiowania WP-Signup.php w Mu-Wtyk-Ins i wprowadzenie zmian w rozwidleniu. Może to wydawać się właściwy sposób. Zamiast tego możesz napisać swoje funkcje od podstaw, aby sprawdzić i wyjść formularzy za pomocą klas, a nie konwencjonalnych funkcji. Moim zdaniem, WP-Signup.php ma już wszystkie niezbędne logikę na naszą stronę, pozostaje tylko do wykonania drobnych zmian.

Podczas aktualizowania WordPress, WP-Signup.php zmienia się od czasu do czasu, ale nie oznacza to, że przy każdym wydaniu będzie musiał zsynchronizować "Forc". Funkcje w WP-Signup.php są zasadniczo zaangażowane tylko przez wyjście HTML, sprawdzenie danych, tworzenie kont i witryn są angażowane w prefiks WPMU_, zadeklarowany w MS-Functions.php.

Stworzymy funkcję, która wyświetli formularz rejestracyjny na stronie. Aby to zrobić, skopiuj WP-Signup.php z roota WordPress w Mu-plugings / Selena-Network / Rejestracja /. Podłącz go wewnątrz Mu-Pugins / Selena-Network / Signup / Plugin.php).

Wymagać wpamu_plugin_dir. "/selena-network/signup/wp-signup.php";

Usuń wszystkie wymagania i niepotrzebne kontrole od samego początku skopiowanego pliku. W wersji 4.1.1 jest to cały kod od 1 do 80 linii.

Teraz jesteśmy gotowi stworzyć główna funkcja Wyświetlić formularz rejestracyjny. Aby to zrobić, wszystkie logika z linii 646 i do samego końca pliku zostaną przeniesione do funkcji o nazwie Selena_network_Signup_main. Na samym końcu usuwasz dwa niepotrzebne zamknięcie

(pozycje 722 i 723), a także połączenia GET_FOOTER ().

W nowo utworzonym Selena_network_signup_main () na samym początku zadeklarujemy zmienną globalną Active_Signup, że wszystkie inne metody z tego użycia pliku. I dodać wywołanie zdarzenia Before_Signup_form, które usunięte z początku pliku.

Selena_Network_signup_main function () (Global $ Active_SignUp; do_action ( "before_signup_form"); // ...)

Teraz pozostaje tylko do zmiany układu we wszystkich miejscach, w których jest to konieczne, a strona rejestracyjna jest gotowa.

Wyjście formularza rejestracyjnego

Jest tu co najmniej dwie opcje. Bardziej wygodnym sposobem utworzenia shortcode i umieścić go na stronie za pomocą zwykłego edytora.

// Utwórz kartę Network_Signup Add_shortcode ("Network_signup", "Selena_network_signup_main");

Drugą opcją jest stworzenie strony Page-SignUp.php w folderze córka rozrywki. Zamiast słowa "rejestracja" można użyć unikalnego identyfikatora przypisanego do strony. Wewnątrz szablonu, dodać wymaganą układ i zrobić wybierz selena_network_signup_main () w odpowiednim miejscu.

W rezultacie moja strona rejestracyjna zaczęła wyglądać znacznie lepiej i czyszczenia.

Strona aktywacji.

Domyślnie WordPress umownie dzieli proces rejestracji w wielu serwerach w dwóch etapach - wystarczy wypełnić formularz na stronie i aktywacji konta, gdy idziesz na link wysłany w wiadomości e-mail. Po wypełnieniu formularza utworzonego w poprzednim rozdziale, WordPress wysyła list z małym nauczania i odniesienie do aktywacji konta.

W przypadku wyjścia strony aktywacyjnej plik WP-Activate.php został odebrany w katalogu głównym WordPress. WP-Activate.php może być również całkowicie zmieniony. Proces jest podobny do tego, co już zrobiliśmy dla WP-Signup.php.

Utwórz example.org/activate przez normalny interfejs. Jako adres, użyj dowolnego adresu URL, który wydaje się odpowiedni dla Ciebie.

Skopiuj plik WP-Activate.php do swoich wtyczek i podłącz go do Mu-Pugins / Selena-Network / Sigup / Plugin.php.

Wymagać wpamu_plugin_dir. "/sena-network/signup/wp-activate.php";

Wewnątrz, nie tak wiele treści, w przeciwieństwie do WP-Signup.php. Plik wykonuje jedną operację - aktywuje konto jeśli poprawna otrzymuje klucz i wyświetla komunikat o błędzie lub udaną operację.

Usuń wszystkie niepotrzebne kontrole i wymagają - od 1 do 69 linii w WordPress 4.1.1. Na samym końcu usuń połączenie Get_footer (). Pozostała zawartość przenoszącym do funkcji Selena_network_activate_main ().

Ciekawe jest zauważenie tego wcześniej pobierz WordPress. (WP-Load.php) ogłoszono stałą WP_Installing. Jego obecność powoduje, że WordPress nie ładuje wtyczek.

Podobnie jak w przypadku strony rejestracyjnej, pozostaje tylko po to, aby naprawić układ, w którym jest to konieczne. Możesz także zmienić tekst wyświetlanych wiadomości (w tym przypadku, nie zapomnij dodać domeny tekstowej wtyczek Mu-wtyczek do wszystkich tłumaczy funkcyjnych, nie jest zainstalowany nigdzie indziej).

Gotowa funkcja może być używana na z góry określonej stronie za pomocą skrótu lub oddzielnego szablonu w spółce zależnej.

Listy aktywacyjne z odpowiednimi referencjami

Strona aktywacji jest gotowa do pracy, ale WordPress nie wie o tym i nadal będzie wysyłać litery aktywacyjne w odniesieniu do WP-Activate.php. W przeciwieństwie do WP-Signup.php Nie ma filtra, co pozwoliłoby na zmianę adresu. Zamiast tego musisz napisać swoją funkcję, która wyśle \u200b\u200blitery poprawnych linków.

W czasie napełniania i wysyłając formularz na stronie rejestracji rozmów WordPress WPMU_SIGNUP_ użytkownik.() lub wpmu_signup_ blog.() W zależności od rodzaju rejestracji. Obie funkcje utworzyć nowy wpis w tabeli WP_SIGNUPS wypełnienie jej niezbędnych treści, wśród których znajduje się klucz aktywacyjny konto.

Po, w zależności od funkcji, WPMU_Signup_ jest nazywany użytkownik._Notifikacja () lub wpmu_signup_ blog._Powiadomienie (). Obie funkcje mają podobną funkcjonalność - generować i wysyłają list z odniesieniem aktywacyjnym, ale podejmują różne argumenty. W obu istnieje filtry do "przechwytywania" zdarzeń.

Jeśli (! Zastosuj_Filters ("wpmu_signup_user_notification", $ Użytkownik, $ User_email, $ Key, $ Meta)) Powrót Fałsz;

Aby aktywować konta za pomocą kreacji blogów:

Jeśli (! Zastosuj_filters ("wpmu_signup_blog_notification", $ Domain, $ Path, $ tytuł, $ Użytkownik, $ User_email, $ Key, $ Meta)) (Returne False;)

Pozostaje tylko napisać swoje ładowarki w którym wysyłanych listów poprzez WP_mail (), a na samym końcu musi dać fałszywe tak, że WordPress nie wysyła list aktywacyjny dwa razy - jeden z twoich, drugi - list domyślnie wraz z linkiem do WP-Activate.php.

selena_network_wpmu_signup_user_notification function ($ user, $ user_email, $ key, $ Meta \u003d Array ()) (// Wygeneruj nagłówek nagłówki, tekst i nas // ... // Wyślij do nas lub dodać CRON-zadanie wysłać list WP_Mail ($ user_email, WP_SPECIALCHARS_DECODE ($ subject), $ message, $ message_headers); // odzyskać Fałsz tak, że WordPress nie wysyła list aktywacyjny dwukrotnie return false;) Add_Filter ( "WPMU_SIGNUP_UVER_NOTIFICATION", "selena_network_wpmu_signup_user_notification", 10, 4) ;

Jeśli wysyłasz litery przez serwer SMTP lub liczba rejestracji jest bardzo duży, powinieneś myśleć o nie wysyłaniu listów natychmiast. Zamiast tego możesz dodać zadania Cron za pomocą WordPress Cron.

Zamknij dostęp do WP-Signup.php i WP-Activate.php

Po utworzeniu własnych rejestracji i aktywacji stron, może być konieczne, aby zamknąć „oryginałów”. Na przykład, jeśli na stronie rejestracji dodatkowe polaTo musi być wypełnienie. Ponadto wiele stron WordPress jest narażony na rejestrację spamu.

Rozwiąż dwa problemy z jedną działaniem, można zapytać Apache, aby dać 404 w przypadku próbowania otwierania tych stron. Aby to zrobić, wystarczy zarejestrować parę dodatkową przepisanie do pliku konfiguracyjnego lub.Htaccess.

Dwukliteńczycy na wpisanie / # wiedzy wyrażenia regularne Nigdy nie będzie zbędny :) Przepisz ^ WP-Signup \\ ogrędnia .Php - Revriterule ^ WP-Activate \\ gwiazdek

Wniosek

W tym i wielu innych "problemach" związanych z WordPress w Internecie istnieje wiele rozwiązań. Na przykład, aby utworzyć strony rejestracji i aktywacji, niektóre są oferowane przez przepisanie oryginalnego WP-Signup.php i WP-Activate.php. Nie należy tego robić, ponieważ w przypadku aktualizacji WordPress stracisz wszystkie zmiany wprowadzone do plików, a nie możesz, sprawdzić integralność jądra za pomocą użycia.

Podczas opracowywania jakichkolwiek dodatków, tematy lub rozwiązania powinny spędzić trochę czasu, aby poradzić sobie z tym, co dzieje się w WordPress. Na to jest wiele przydatnych narzędzi debugowania.

Str.s.

Aby automatycznie przypisać różne role, nowi użytkownicy mogą korzystać z multisite wtyczki zarządzania użytkownikami.

Jeśli masz jakieś pytania lub trudności podczas tworzenia stron rejestracji i aktywacji po przeczytaniu artykułu, zostaw komentarz i odpowiemy.

27.03.2015 27.03.2015

Programista WordPress. Uwielbia zamówić wszystko i zajmuje się nowymi narzędziami. Zainspirowany architekturą składników symfony.

  • Dzwon.

    Są ci, którzy przeczytali tę wiadomość przed tobą.
    Subskrybuj odbieranie artykułów świeżych.
    E-mail
    Nazwa
    Nazwisko
    Jak chcesz przeczytać dzwonek
    Bez spamu