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.<< 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. 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. 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". 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: 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. 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. 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. 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. 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. 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. 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. 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 (). 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: Wewnątrz WP-Activate.php musisz zrobić to samo: 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. 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. 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. 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. 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. 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 (). 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. zERO. Nic nie powraca. 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. 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 ...) 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 ...)) 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")); 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")); 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"); 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. 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. 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. 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. 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. 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. 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. 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. 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ęcieCzek
Wynik
Funkcjonalność tematu: Inwazja na terytorium wtyczek
Wprowadzenie do biblioteki aktywacji wtyczki TGM
Ustawianie aktywacji wtyczki TGM
"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
Główna sieć stron internetowych.
funkcje.php?
Lyrical Digression.
Zamów w plikach.
Adres strony rejestracyjnej
Tworzenie strony.
wP-Signup.php i WP-Activate.php
Wysyłamy litery aktywacji
Wniosek
Premia. Ochrona przed spamerami
Jak to działa
Warunki korzystania
Uwagi dotyczące obszaru zmiennych
Zwroty
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)
Przykłady.
#jeden. Uruchamianie funkcji podczas aktywowania wtyczki
# 2. Uruchamianie metody klasy
# 3. Uruchom metodę klasy z osobnego pliku
#. Uruchom klasę klasy z klasy
# 5 Zrób wszystko natychmiast po aktywacji wtyczki
# 6 Kolejna demonstracja korzystania z funkcji
Główna sieć stron internetowych.
Alternatywa dla funkcji.php.
Zamów w plikach.
Strona rejestracyjna
Przekieruj do żądanej strony rejestracyjnej
WP-Signup.php Funkcjonalność
Skopiuj funkcjonalne WP-Signup.php