Позволява ви да използвате една инсталация на WordPress за множество сайтове едновременно. В този случай всеки сайт получава свои собствени таблици в базата данни с уникален префикс.

Таблици с данни на регистрирани потребители са общи за всички сайтове в мрежата. Това е определено предимство и като се регистрирате веднъж можете да получите достъп до няколко сайта. Освен това във всеки сайт един и същ акаунт може да има различни права. Например потребител може да бъде редактор на един сайт и администратор на друг.

В нормално инсталиране на WordPressстраницата за регистрация, оторизация и нулиране на парола показва файла wp-login.php.

  • wp-login.php - оторизация
  • wp-login.php?action=register - регистрация
  • wp-login.php?action=lostpassword - нулиране на парола

В режим Multisite ядрото на WordPress се държи малко по-различно и когато щракнете върху връзката wp-login.php?action=register, ще бъдете пренасочени към wp-signup.php. Това е вашата страница за регистрация в мрежата, която се предлага с WordPress по подразбиране.

В допълнение към регистриране на обикновени потребителски акаунти, можете също да създадете нов сайт в него, ако супер администраторът е активирал тази функция в мрежовите настройки (Администратор на мрежата → Настройки → Настройки на мрежата).

В повечето теми страницата за регистрация не изглежда много добре. Много теми използват CSS рамки като Bootstrap и свои специфични класове за стилизиране на различни елементи на страницата, така че е трудно да се напише един HTML, който да пасва на всички.

Но не се отчайвайте, ако страницата изглежда неподредена. Файлът wp-signup.php е страхотен в началото, когато нямате време да обработите всеки детайл от сайта - можете да се съсредоточите върху други по-важни страници и съдържание.

Когато сте готови да направите своя собствена страница за регистрация, wp-signup.php е добра справка и пример за лесно разбиране на набора от функции, които WordPress предоставя за обработка и валидиране на потребителски вход и създаване на нови акаунти.

Основен сайт на мрежата

По подразбиране WordPress отваря страницата за регистрация (wp-signup.php) в главния домейн (уебсайт) в мрежата. Можете обаче да създадете регистрационни страници за всеки сайт в мрежата, дори ако има теми.

Ще разгледаме случая, когато всички сайтове в мрежата използват една и съща тема, но всеки от тях има страница за регистрация. Сайтовете се различават по език (английски и руски), така че страницата за регистрация ще се показва на „родния“ език на сайта. В случай, че сайтовете използват различни теми, всичко ще зависи от това кои са те, дали едно и също оформление е подходящо за тях (чудесна ситуация, която може да ви накара да обедините всичките си теми) или дали си струва да разработвате страници поотделно.

алтернатива на functions.php

Ред на файловете

Плъгините на MU могат да съдържат произволен брой файлове и структура, която ви се струва логична. Следвам йерархия като тази:

| mu плъгини | | load.php | | селена мрежа | | | регистрирайте се | | | | плъгин.php | | | ... | | | реактивен ранец | | | | plugin.php

Във файла load.php са свързани преводи и всички необходими "плъгини":

// Зареждане на преводи за MU добавки load_muplugin_textdomain("selena_network", "/selena-network/languages/"); // Функционалността за страницата за регистрация изисква WPMU_PLUGIN_DIR. "/selena-network/signup/plugin.php"; // Друг плъгин // изисква WPMU_PLUGIN_DIR ...

Папките на добавките се съхраняват в директорията на selena-network. Всеки има свой собствен plugin.php, който включваме в load.php. Това дава гъвкавост и възможност за незабавно деактивиране и активиране отделни компонентипо работния проект в случай на авария.

Страница за регистрация

След като разберем къде и как ще напишем кода, можем да преминем към създаването на страницата за регистрация.

Нека създадем страница с адрес example.org/signup/ чрез обичайния интерфейс. Можете да използвате всеки URL адрес, който изглежда подходящ за вашия проект като адрес.

Пренасочване към необходимата страница за регистрация

За да може WordPress да знае за нашата нова страница за регистрация и да пренасочи към нея, когато щракнете върху връзката „Регистрация“, се използва филтърът wp_signup_location. Може да се намери в wp-login.php и отговаря за пренасочването към wp-signup.php по подразбиране.

Case "register" : if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); изход; // ...

Както си спомняте, по подразбиране страницата за регистрация се отваря в главния мрежов домейн. Ето защо тук се използва network_site_url().

Нека добавим нашия манипулатор към филтъра в mu-plugins/selena-network/signup/plugin.php , който ще даде адреса на страницата за регистрация на текущия сайт:

Функция selena_network_signup_page($url) ( return home_url("регистрация"); ) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_network е префикс, който използвам в имената на всички функции в плъгините на MU на моя сайт, за да избегна сблъсъци, той трябва да бъде заменен с моя собствен уникален префикс. Добавете приоритет на филтъра 99, защото някои плъгини като bbPress и BuddyPress могат да презапишат този адрес със свой собствен (MU плъгините се зареждат преди нормалните плъгини, вижте по-горе).

Обърнете внимание, че се използва home_url(), който за разлика от network_site_url() връща адреса на текущия сайт, а не на основния сайт в мрежата.

wp-signup.php функционалност

Файлът wp-signup.php съдържа много функции и код. За да видите голямата картина, можете да използвате сгъване на код. По правило на английски това се нарича "сгъване на кода".

В самото начало на файла от редове 1 до 80 (във версия 4.1.1) различни проверкии показване на "началото" на страницата с get_header().

След това се декларират много методи и преди да започнем да работим с тях, си струва да разберем какво прави всяка функция. Много от тях често използват други функции с префикс wpmu_, всички от които са декларирани във файла wp-includes/ms-functions.php. Този раздел е труден за разбиране, без сами да видите кода. По-долу е кратко описание на основните функции, в случай че имате затруднения.

  • wpmu_signup_stylesheet() - Извежда допълнителен CSS на страницата за регистрация.
  • show_blog_form() - полета за регистрация на сайта (адрес, име, видимост за търсачките).
  • validate_blog_form() - Валидира въведения адрес и заглавие на уеб сайт с помощта на wpmu_validate_blog_signup().
  • show_user_form() - полета за регистрация на потребител (вход и имейл адрес).
  • validate_user_form() - проверка на въведените данни за вход и имейл адрес. поща с wpmu_validate_user_signup().
  • signup_another_blog() - полета за регистриране на нови сайтове с помощта на show_blog_form() за потребители, които вече са регистрирани в сайта.
  • validate_another_blog_signup() - Валидира адреса и заглавието на сайта с validate_blog_form().
  • signup_user() е основната функция за показване на полетата на страницата за регистрация.
  • validate_user_signup() - Валидира потребителското име и имейл адреса. поща с validate_user_form().
  • signup_blog() - полета за въвеждане на адрес, име и видимост на сайта (втората стъпка от регистрацията) чрез show_blog_form() .
  • validate_blog_signup() - валидира данните за вход, имейл адреса. поща, адрес и име на сайта.

В най-долната част на файла wp-signup.php (от ред 646 във версия 4.1.1) е основната логика на страницата за регистрация, която използва всички методи, описани по-горе. Тази част от кода не се премества във функция. В края се извиква get_footer().

Копирайте функционалността на wp-signup.php

След това ще бъде описана процедурата за копиране на wp-signup.php в MU плъгини и извършване на промени във "форка". Може би това не изглежда като правилния начин. Вместо това можете да напишете свои собствени функции за валидиране и показване на формуляри от нулата, като използвате класове, а не обикновени функции. Според мен wp-signup.php вече има цялата необходима логика за нашата страница, остават само малки промени.

Когато актуализирате WordPress, wp-signup.php също се променя от време на време, но това не означава, че ще трябва да синхронизирате своя „форк“ с всяко издание. Функциите вътре в wp-signup.php основно не правят нищо освен HTML изход, валидиране на данни, създаване на акаунт и сайт и методите с префикс wpmu_, декларирани в ms-functions.php.

Нека създадем функция, която ще показва формата за регистрация на страницата. За да направите това, копирайте wp-signup.php от корена на WordPress в mu-plugings/selena-network/signup/ . Свържете го в mu-plugins/selena-network/signup/plugin.php).

Изискване на WPMU_PLUGIN_DIR. "/selena-network/signup/wp-signup.php";

Премахнете всички задължителни и ненужни проверки от самото начало на копирания файл. Във версия 4.1.1 това е целият код от редове 1 до 80.

Сега сме готови да творим Главна функцияза показване на формата за регистрация. За да направим това, ще прехвърлим цялата логика от ред 646 до самия край на файла във функция, наречена selena_network_signup_main. В самия край ще премахнем две допълнителни затваряния

(редове 722 и 723), както и извикването на get_footer() .

В новосъздадения selena_network_signup_main() , в самото начало ще декларираме глобалната променлива active_signup , която се използва от всички останали методи от този файл. И добавете извикване към събитието before_signup_form, което премахнахме от самото начало на файла.

Функция selena_network_signup_main() (глобален $active_signup; do_action("before_signup_form"); // ... )

Сега остава само да промените оформлението на всички места, където е необходимо и страницата за регистрация е готова.

Изход от регистрационна форма

Тук има поне два варианта. По-удобен начин е да създадете кратък код и да го поставите на страницата чрез обикновен редактор.

// Създаване на кратък код network_signup add_shortcode("network_signup", "selena_network_signup_main");

Втората опция е да създадете шаблон на страница page-signup.php в папката на вашата дъщерна тема. Вместо думата "регистрация", можете да използвате уникален идентификатор, присвоен на страницата. Вътре в шаблона добавете необходимото оформление и извикайте selena_network_signup_main() на правилното място.

В резултат страницата ми за регистрация изглежда много по-добре и по-чиста.

Страница за активиране

от WordPress по подразбиранеусловно разделя процеса на регистрация в Multisite на две стъпки - попълване на формуляр в сайта и активиране на акаунт при кликване върху линк, изпратен в имейл. След като попълните формуляра, създаден в предишния раздел, WordPress изпраща имейл с някои инструкции и връзка за активиране на вашия акаунт.

Файлът wp-activate.php, намиращ се в основната директория на WordPress, отговаря за показването на страницата за активиране. wp-activate.php също може да бъде напълно променен. Процесът е подобен на това, което вече направихме за wp-signup.php.

Нека създадем страницата example.org/activate/ чрез обичайния интерфейс. За адреса използвайте всеки URL адрес, който ви се струва подходящ.

Копирайте файла wp-activate.php в нашите добавки за MU и го включете в mu-plugins/selena-network/signup/plugin.php.

Изискване на WPMU_PLUGIN_DIR. "/selena-network/signup/wp-activate.php";

Вътре няма много съдържание, за разлика от wp-signup.php. Файлът извършва една операция - активира акаунта, ако бъде получен правилният ключ и показва съобщение за грешка или успех.

Нека премахнем всички ненужни проверки и изискване - редове от 1 до 69 в WordPress 4.1.1. В самия край ще премахнем извикването get_footer(). Останалото съдържание ще бъде прехвърлено към функцията selena_network_activate_main().

Интересно е да се отбележи, че тук, преди да се зареди WordPress (wp-load.php), беше декларирана константата WP_INSTALLING. Неговото присъствие кара WordPress да не зарежда плъгини.

Както в случая със страницата за регистрация, остава само да коригирате оформлението, където е необходимо. Можете също така да промените текста на показаните съобщения (в този случай не забравяйте да добавите текстовия домейн на вашите MU добавки към всички функции на преводача, той не е зададен никъде по подразбиране).

Готовата функция може да се използва на предварително създадена страница чрез кратък код или отделен шаблон в дъщерна тема.

Имейли за активиране с правилни връзки

Страницата за активиране е готова за работа, но WordPress не знае за това и все пак ще изпраща имейли за активиране с връзка към wp-activate.php. За разлика от wp-signup.php, няма филтър, който да ви позволи да промените адреса. Вместо това трябва да напишете своя собствена функция, която ще изпраща имейли с правилните връзки.

В момента на попълване и изпращане на формата на страницата WordPress регистрацияизвиква wpmu_signup_ потребител() или wpmu_signup_ блог() в зависимост от вида на регистрацията. И двете функции създават нов записв таблицата wp_signups, като я попълните с необходимото съдържание, сред което е и ключът за активиране на акаунта.

След това, в зависимост от функцията, се извиква wpmu_signup_ потребител _notification() или wpmu_signup_ блог _уведомление() . И двете функции имат сходна функционалност – генерират и изпращат имейл с връзка за активиране, но приемат различни аргументи. И двете имат филтри за "улавяне" на събитието.

Ако (! apply_filters("wpmu_signup_user_notification", $user, $user_email, $key, $meta)) върне невярно;

За да активирате акаунти със създаването на блог:

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

Остава само да напишете свои собствени манипулатори, вътре в които да изпращате писма чрез wp_mail() и в самия край не забравяйте да дадете false, така че WordPress да не изпраща писмо за активиране два пъти - едното е ваше, другото е писмо по подразбиране с връзка към wp-activate.php.

Функция selena_network_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // Генериране на заглавка, тяло и заглавки на имейл // ... // Изпратете имейл или добавете Cron задача за изпращане на имейл wp_mail($user_email , wp_specialchars_decode($subject), $message, $message_headers); // Подаване на false, така че WordPress да не изпраща имейл за активиране два пъти връщане false; ) add_filter("wpmu_signup_user_notification", "selena_network_wpmu_signup_user_notification", 10, 4);

Ако изпращате имейли през SMTP сървър или броят на регистрациите е много голям, трябва да помислите да не изпращате имейли незабавно. Вместо това можете да добавяте Cron задачи с помощта на WordPress Cron.

Затваряне на достъпа до wp-signup.php и wp-activate.php

След като създадете свои собствени страници за регистрация и активиране, може да се наложи да затворите „оригиналите“. Например, ако има допълнителни полета на страницата за регистрация, които трябва да бъдат попълнени. Освен това много сайтове на WordPress са обект на спам регистрации.

За да разрешите два проблема с едно действие, можете да помолите Apache да върне 404 в случай на опит за отваряне на тези страници. За да направите това, просто трябва да регистрирате няколко допълнителни RewriteRule във вашия конфигурационен файл или .htaccess.

RewriteEngine В RewriteBase / # Познаването на регулярните изрази никога не е излишно :) RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # НАЧАЛО на WordPress # Оставяне на правилата на WordPress по подразбиране :) # ... # КРАЙ на WordPress

Заключение

За този и много други „проблеми“, свързани с WordPress, има много решения в интернет. Например, за да се създадат страници за регистрация и активиране, някои предлагат пренаписване на оригиналните wp-signup.php и wp-activate.php. Това не трябва да се прави, защото ако актуализации на wordpressще загубите всички промени, направени във файловете, и също така няма да можете да проверите целостта на ядрото с .

Когато разработвате добавка, тема или решение, прекарайте малко време, за да разберете какво се случва в WordPress. Има много полезни инструменти за отстраняване на грешки за това.

P.S.

Можете да използвате приставката за многосайтово управление на потребители, за да присвоите автоматично различни роли на нови потребители.

Ако имате въпроси или затруднения по време на създаването на страници за регистрация и активиране, след като прочетете статията, оставете коментар и ние определено ще отговорим.

27.03.2015 27.03.2015

Разработчик на WordPress. Обича да има ред във всичко и да разбира новите инструменти. Вдъхновен от компонентната архитектура на Symfony.

  • --- Изберете склад --- Buffalo Grove IL 60089 САЩ(Buffalo Grove IL 60089 USA)) Чикаго САЩ САЩ Tamara(16677 SW Blanton street ALOHA. Oregon 97078) Highland Park(USA Highland Park , IL 13R Villa Madrid 92200 Neuilly-sur -Seine) Republica Moldova , Falesti (s.Fagadau) South Kensington (Bute street) Adler (Quiet lane 2, Kudepsta District) Aktobe (47/2 Aktobe street) Almetievsk (Almetievsk, Lenin street 13, office 306) Anapa (88 Terskaya) ул., 3-ти етаж) Астрахан (ул. Коммунистическа 17, офис 4) Атирау (Атирау, пр. Азаттик 42, офис 206) Бердянск (Запорожка област) Бишкек ( Бишкек, бул. Чуй 32B, търговски център "Изумруд" офис C-5 ) Благовещенск (ул. 50 Лет Октября 15. "Амурски панаир" офис 575) Бугуруслан (ул. Краснознамная ул. Красная, 61 (2-ри етаж) център на града) Владивосток (ул. Светланская 147, офис 2/4) олгоград (град Волгоград магистрала Авиатори 15 склад 23) Дюртюли (ул. Агидел д.4 кв.2) Йейск (ул. Первомайская 56, офис 308) Екатеринбург (ул. Мамин-Сибиряк 10, офис 3) Иваново (проспект Шереметевски, 85G, бизнес център Premium Plaza 2 етаж, офис 212) Ижевск (ул. Ленина 21, офис 304. Бизнес център " Форум") Избербаш (Чапаева 4 инд. 368501) Иркутск (Иркутск, ул. Горная 4 (до търговския център Карамел) офис 407) Ишимбай (Зорге, къща 18) Йошкар-Ола (24в пр. Ленин, офис 318) Казан (прев. Едно- едностранно Гривки къща 10, метростанция "Козя Слобода" също улица Декабристов, 85 "Б" Бизнес център "Релита" офис 411) Каменск-Уралски (проспект Победа 56) Кемерово (ул. Демян Бедни, 1 офис 401) Киев (ул. Олевская) 9 kv.4 (пристигане с предварително обаждане) Комсомолск на Амур (ул. Шиханова 10, офис 1 вход от Комсомолская от края на сградата.) Кострома (проспект Мира 51, офис 15) .Красная 124 офис 302) Красноярск (пр. Krasnoyarsky работник, 120 търговски център "Krasnoyarye") Лвов (Sobornaya Square 12A) Махачкала (Akushkinogo 9v) Миас (st. 30 let VLKSM 85) Минск (Korzhenevskogo, 26) Москва (Метро:VDNH, Yaroslavskaya st., 10, сграда 4, офис 10 6) Москва (булевард Симферополски) Москва (Глазовски алея 5, вход в арката, вратата отляво на метростанция: Смоленская-500м, Кропоткинская-1км., Парк Култури-1км.) Москва (м. Чеховская, Пушкинская, Тверская. Strastnoy Boulevard, 6, сграда 1, Бизнес център, офис 421) Москва (Лобня, ул. Маяковского, 4A, TR1, 3-ти етаж, офис 301) Москва (Метростанция Молодежная, улица Ярцевская, 27 сграда 9 Здравен център "Четири" Елементи") Москва (Красная Пресня 38-45) Москва (Св. Москва м. Taganskaya радиален изход 3, 30 метра от метрото. ул. Bolshiye Kamenshchiki 1, 4-ти етаж, офис 30) Москва (метростанция Leninsky Prospekt, Vavilova 9A, сграда 6, офис 10 B, 3-ти етаж) Москва (метростанция Novoslobodskaya, Mendeleevskaya, Mayakovskaya, Belorusskaya (радиална). 4-та улица Tverskaya - Yamskaya , 24. Вход през арката, МАГАЗИН ЗА ЛЮБИМЦИ) Москва (метро Belorusskaya (пръстен), 5 метра от изхода на метрото. Площад Тверская застава, 3, ет. 3, офис 321. В близост до жп гара Belorussky. ) Москва (M. ALTUFIEVO , ул. Псковская, 6) Москва (Москва, ул. Радио , вход 2, офис 2) Набережние Челни (ул. Ш.Усманова 122 kb. 111 1-ви етаж) Налчик (Налчик, ул. Киров 292а, 2-ри етаж, офис 6) ) Находка (ул. Пограничная 6, стая 304) Невинномиск (пл. 50 Let Oktyabrya 8A) Нефтеюганск (12 микрорайон дом 7) Нижневартовск (Нижневартовск, ул. Мира 31Б.) Нижни Новгород (ул. Коминтерн 139, офис 603 (бизнес OREOL) център)) Нижни Новгород (м. Горковская, ул. Костина, 3, BC "Нов площад", 2-ри етаж, офис 239) Нижни Тагил (на л. Красноармейская д.42а, 3-ти етаж офис 4) Нижни Тагил (Нижни Тагил, ул. Папанина 5, офис 1, Кушва, ул. Горнякова 4) Новосибирск (улица, Октябрская 42, офис 601, бизнес център приблизително площад Ленин, кино Маяковски) Новосибирск (улица Гогол 33/1. На 20 метра от метростанция Маршал Покришкина, пазаруване Гогол център.) Новотроицк (ул. Советская д .144 кв. 26) Нови Уренгой (микрорайон Дружба, къща 4/3, ап. 183) Норилск (Ленински проспект 47а от 79) Нур-Султан (Астана) (Бейбитшилик 14, пр.н.е.) Марден, офис 708) Одеса (b -r френски 60 мултидисциплинарен рехабилитационен санаториум "SARTUS") Oktyabrsky (микрорайон 32а, къща 6, ап. 88) Омск (ул. Северная 5, първи етаж, дясна веранда.) Орск (проспект Ленин 93 ) Павлодар (ул. Сатпаев 71 офис 107) Перм (Советская д.52 офис 1) Перм (ул. Дружби 34 офис 305) Пит-Ях (микрорайон 5, дом 5) Пятигорск (ул. 295 стрелкова дивизия) и 13 k.2) Ростов на Дон (Соборни алея 21 офис 10 Б) Салават (ул. Ленина, дом 3 офис 209, 2 етаж) Самара (ул. Ново-Садовая 106, офис 804, ляв асансьор, 8 етаж) ул. , Петербург (метро: Василеостровская, 13-та линия на Василевски остров, 78, офис 182) Санкт Петербург (метростанция Достоевская (5 метра) и метростанция Владимирская (300 метра) VLADIMIRSKY PASSAGE 3-ти етаж, централен вход ПЪРВА ГАЛЕРИЯ, пр. Владимирски 19) Санкт Петербург (метростанция Адмиралтейская (10 метра) Спаская 1 мин пеша ул. Ефимов 1, етаж 2, офис 4, Бизнес център "Сенная 4", вход отляво на кафе "Север") Саратов (Болшая Горная ул., 359В, офис № 3) Севастопол (ул. Очаковцев 19 , център "Плаза", партер, офис 29/2) Снежинск (ул. Забабахина 19 а) Сочи (Сочи ко. Донская къща 15.) Сочи ( ул. Советская 42 офис 204) Ставропол (ул. Ломоносов 21 офис 18) Стерлитамак (ул. Худайбердина 85, ет. 3) Сургут (ул. 30 лет Победи 64) Тоболск (Тоболск, микрорайон 6, сграда 11, офис 39 (вход от Авеню Комсомолски)) Толиати (40 години) Победи, 50, офис 212а, TD Raduga 1-ви етаж) Томск (Томск, улица Советская 84) Туймази (ул. Мичурина, 15 офис 2) Тюмен (ул. Герцен, 72 офис 214) Уляновск ( Улица Рябиков, д 73) Уст-Каменогорск (ул. Горки 57, офис 213) Уфа (пл. Верхнеторгова, 6 (Бизнес център НЕСТЕРОВ)) Хабаровск (ул. Постишева, 16 офис от 108) Ханти-Мансийск (Г. Ханти-Мансийск, ул. Карл Маркс 15, 2-ри етаж.) Челябинск (пр. Победи 168, 3-ти етаж, офис 36.) Черкеск (ул. Ленина 101) Чита (ул. Бабушкина 104, офис 425) Чишми (Околовръстен път 17) Чишми (пр. Дружба) " Фонтан, 4-ти етаж) Янаул (улица Советская, 23, офис N 8 сграда Березка) Ярославъл (57 Showroom) Ярославъл (улица Чкалова 2) Бирск Башкортостан () ?>

    Често възниква въпросът как да поставите един формуляр на всички страници на вашето Zend приложение. Да кажем, че искам да поставя формуляра за абонамент във файла layout.phtml, така че да се намира на всяка страница. Командата layout->content() работи с действия и контролери... И така, как да внедрим това, от което се нуждаем?

    Едно решение на този проблем е да се създаде помощник за действие.

    Нека започнем с настройката на ZF приложението:

    $ zf създаване на формуляр за оформление на проект $ формуляр за оформление на cd $ zf активиране на оформление

    Почистете файла application/views/scripts/index/index.phtml и поставете нещо подобно:

    application/views/scripts/index/index.phtml:

    Това е началната страница

    Сега можем да започнем.

    Формата

    Да творим нова форма:

    $ zf създаване на формуляр за регистрация

    Както и полетата, от които се нуждаем:

    application/forms/Signup.php:

    Клас Application_Form_Signup разширява Zend_Form ( public $processed = false; public function init() ( $this->addElement("text", "name", array("label" => "Name", "required" => true, " validators" => array(array("StringLength", false, array("max"=>75)))),)); $this->addElement("text", "email", array("label" = > "Email", "required" => true, "validators" => array(array("StringLength", false, array("max"=>150)), "EmailAddress",),)); $this- >addElement("submit", "go", array("label" => "Sign up",)); ) )

    Имаме формуляр. Остава да го извадим.

    Помощник за действие

    Използваме помощника за действие, за да инициализираме формата.

    Добавете ред към application.ini:

    приложение/configs/application.ini:

    Resources.frontController.actionhelperpaths.Application_Controller_Helper = APPLICATION_PATH "/controllers/helpers"

    Сега системата знае къде да търси помощници за действие, така че можем да продължим:

    приложение/Bootstrap.php:

    bootstrap("frontController"); $signup = Zend_Controller_Action_HelperBroker::getStaticHelper("Регистрация"); Zend_Controller_Action_HelperBroker::addHelper($signup); ) )

    Помощникът за действие ще изглежда така:

    application/controllers/helpers/Signup.php:

    getActionController()->изглед; $form = нов Application_Form_Signup(); $request = $this->getActionController()->getRequest(); if($request->isPost() && $request->getPost("submitsignup")) ( if($form->isValid($request->getPost())) ( $data = $form->getValues() ; // обработка на данни $form->processed = true; ) ) $view->signupForm = $form; ) )

    Тук няма нищо особено. Просто обърнете внимание на родителския клас.

    Вижте помощник

    За да покажем формуляра, нека създадем помощник за изглед, който изглежда така:

    application/views/helpers/SignupForm.php:

    Абонирайте се за нашия бюлетин

    "; if($form->processed) ( $html .= "

    Благодаря ви, че се регистрирахте

    "; ) else ( $html .= $form->render(); ) return $html; ) )

    Всичко, което ни остава, е да изобразим формата в layout.phtml:

    application/layouts/scripts/layout.phtml:

    headMeta()->prependHttpEquiv("Content-Type", "text/html; charset=UTF-8"); $this->headTitle("Тест на формата за оформление"); echo $this->doctype(); ?> headMeta()->setIndent(4); ?>headTitle()->setIndent(4); ?>

    layout()->content; ?>
    signupForm($this->signupForm); ?>

    Се случи

    Това е всичко. Постигнахме функционалността, която си представяхме.

    См … Речник на синонимите

    БАИНКИ, неизм. гл. (детски). сън. Искаш ли цици? Легнете баинки. Обяснителен речник на Ушаков. Д.Н. Ушаков. 1935 1940 ... Обяснителен речник на Ушаков

    Правете / правете баинки (чао чао). Джарг. те казват Совалка. сън. Максимов, 21 … Голям речник на руските поговорки

    аз предикат. разгънете За състоянието на съня (в речта на децата или в разговора на възрастни с деца). II межд. разгънете Използва се като компонент на приспивна песен. Обяснителен речник на Ефремова. Т. Ф. Ефремова. 2000... Модерен речникРуски език Ефремова

    bainki- ainki, неизменност ... Руски правописен речник

    bainki- неизменност... Правописен речник на руския език

    Международен във функ. сказ. \u003d Бай Бай (II знак) ... енциклопедичен речник

    bainki- вътр.; във функ. сказ. = чао чао 2) … Речник на много изрази

    bainki- ба / мастило / и между ... Морфемен правописен речник

    Книги

    • Bainki, Tokmakova I.P. В тази книга можете да четете или дори да пеете приспивни песни за вашето бебе. Изрежете книга...
    • Баинки (изд. 2006), Ирина Токмакова. В тази книга можете да четете или дори да пеете приспивни песни на вашето бебе. Изрежете книга. ISBN:5-9524-2404-X…

    Нека създадем наша собствена страница за многосайтова регистрация вместо стандартната wp-signup.php.

    AT нормална инсталация страница на WordPressрегистрация (упълномощаване, нулиране на парола) извежда файла wp-login.php.

    • /wp-login.php - оторизация
    • /wp-login.php?action=register - регистрация
    • /wp-login.php?action=lostpassword - нулиране на парола

    Има отделни условия за мултисайт в wp-login.php. Така че, когато щракнете върху /wp-login.php?action=register на мултисайт, WordPress ще пренасочи към страницата /wp-signup.php. В много теми страницата не изглежда много привлекателна, така че ще направим наша собствена.

    Основен сайт на мрежата

    По подразбиране WordPress отваря страницата за регистрация (wp-signup.php) в главния домейн (уебсайт) в мрежата. Въпреки това е възможно да се направи отделна страница за регистрация за всеки сайт в мрежата, дори и да имат различни теми. Ще разгледаме случая, когато всички сайтове в мрежата имат собствена страница за регистрация, но се използва една и съща тема и сайтовете се различават само по език. Ако се използват различни теми, ще е необходим повече код.

    functions.php?

    Не. Името на този файл изглежда се споменава във всяка статия в WordPress. В нашия случай, като се има предвид факта, че функционалността за регистрация е предназначена за няколко сайта, има смисъл да се премести в MU добавки, които се зареждат при отваряне на всеки сайт.

    Лирично отклонение

    Струва си да се отбележи, че MU добавките се зареждат преди нормалните добавки и преди ядрото на WordPress да се зареди напълно, така че извикването на някои функции може да доведе до фатални грешки в PHP. Това "ранно" зареждане има своите предимства. Да кажем, че във всяка тема не можете да се придържате към някои действия, които работят дори преди файлът functions.php да бъде зареден от темата. Пример за това са действията от плъгина на Jetpack под формата jetpack_module_loaded_related-posts (related-posts е името на модула), с който е възможно да се следи активността на модулите в Jetpack. Това действие не може да бъде „прикачено“ от файла на темата, тъй като действието вече е задействано, преди темата да бъде заредена – плъгините се зареждат преди темите. Можете да разгледате обща картина на реда на зареждане на WordPress на страницата за справка за действие в кодекса.

    Ред на файловете

    Плъгините на MU могат да съдържат произволен брой файлове и всякаква структура, която ви се струва логична. Следвам йерархия като тази:

    |-mu-plugins |-|-load.php |-|-|-selena-network |-|-|-|-регистрация |-|-|-|-|-plugin.php |-|-|-| -|-... |-|-|-|-jetpack |-|-|-|-|-plugin.php

    Във файла load.php са свързани всички необходими "плъгини" за нашата мрежа:

    // Зареждане на Traslates за всички добавки load_muplugin_textdomain("selena_network", "/selena-network/languages/"); // Регистрацията в мрежа изисква WPMU_PLUGIN_DIR. "/selena-network/signup/plugin.php"; // Други добавки // изискват WPMU_PLUGIN_DIR ...

    Папките с добавки се съхраняват в папката selena-network, всяка има свой собствен plugin.php, който включваме в load.php. Това дава гъвкавост и възможност за бързо деактивиране и активиране на определени неща.

    URL адрес на страницата за регистрация

    Филтърът wp_signup_location се използва за указване на адреса на страницата за регистрация. Може да се намери във файла wp-login.php и отговаря за пренасочването към wp-signup.php.

    Case "register" : if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); изход;

    Нека добавим нашата функция към mu-plugins/selena-network/signup/plugin.php, която ще даде адреса на страницата за регистрация на текущия сайт:

    Функция selena_network_signup_page ($url) ( return home_url (). "/signup/"; ) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

    selena_network е префикс, който използвам в имената на всички функции в плъгините на MU на моя сайт, за да избегна сблъсъци, той трябва да бъде заменен с вашия собствен уникален префикс. Добавете приоритет на филтъра 99, защото някои плъгини като bbPress и BuddyPress могат да презапишат този адрес със свой собствен (MU плъгините се зареждат преди нормалните плъгини, вижте по-горе). Обърнете внимание, че home_url() се използва вместо network_site_url(), за да запази посетителя в същия домейн. Всеки URL може да се използва като адрес.

    Създаване на страница

    Сега ще създадем страница с адрес site.com/signup/ през обичайния интерфейс, а в папката с дъщерна тема шаблон за нашата нова страница- регистрация на страницата.php. Вместо думата "регистрация" можете да използвате уникален идентификатор.

    Вътре в новия шаблон трябва да извикате функцията selena_network_signup_main(), която ще покаже формуляра за регистрация.

    Струва си да се отбележи, че целият процес с шаблони не е задължителен и вместо това можете да създадете свой собствен кратък код, който също ще извика функцията selena_network_signup_main().

    wp-signup.php и wp-activate.php

    Сега нека създадем функция, която ще показва формата за регистрация. За да направите това, копирайте файловете wp-signup.php и wp-activate.php от корена на WordPress в mu-plugings/selena-network/signup/ (и не забравяйте да ги включите в mu-plugins/selena-network /signup/plugin.php) . По-нататъшните манипулации с файлове са изключително трудни и дълги за описание, така че ще трябва да ги направите сами. Просто ще опиша какво точно трябва да се направи и ще публикувам изходни файловена вашия проект:

    1. В началото на файла премахнете всички require , извиквания на функции и друг код извън функциите.
    2. Преименувайте всички функции, като добавите уникални префикси към имената.
    3. Увийте долната част на кода wp-signup.php във функцията selena_network_signup_main и напишете глобален $active_signup в самото начало; .
    4. Заменете оформлението с вашето собствено на правилните места.

    В wp-activate.php трябва да направите същото нещо:

    1. Премахнете целия код извън функциите, обвийте оформлението в отделна функция.
    2. Променете оформлението, където е необходимо.

    Файлът wp-activate.php отговаря за страницата за активиране на акаунта. Както при страницата за регистрация, за нея трябва да създадете отделен шаблон, в който трябва да извикате функцията от файла wp-activate.php.

    Изпращане на имейли за активиране

    Страницата за регистрация изпраща имейл до посетителя с връзка за активиране на акаунта. По подразбиране това се обработва от функцията wpmu_signup_user_notification() от файла ms-functions.php. Неговата функционалност може да бъде заимствана от неговата функция. Причината да спрете да използвате тази функция е, че тя изпраща връзка за активиране на акаунт от wp-activate.php. Можете да „изключите“ тази функция с помощта на филтъра wpmu_signup_user_notification, като му дадете false (ако това не е направено, писмото за активиране ще бъде изпратено два пъти, добре, всъщност две различни букви).

    Функция armyofselenagomez_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // ... // Код от wpmu_signup_user_notification() функция wp_mail($user_email, wp_specialchars_decode($subject), $message, $message_headers) ; върне false; ) add_filter("wpmu_signup_user_notification", "armyofselenagomez_wpmu_signup_user_notification", 10, 4);

    В резултат на това страницата за регистрация в темата Selena стана много по-чиста и подредена.

    Заключение

    Има много други не много правилни начини в интернет как да направите същото - Apache пренасочвания, AJAX форми, които няма да работят без Java Script и т.н. Всичко това не ми хареса много, затова се опитах да го направя толкова правилно, колкото възможно на моя собствен сайт.

    Отбелязвам, че трябва внимателно да редактирате файловете и да се опитате да не се отклонявате твърде много от оригиналните, така че в бъдеще, ако WordPress промени файловете wp-signup.php и wp-activate.php, ще бъде по-лесно да ги сравнявате да намерят промени.

    Не забравяйте да погледнете източниквсички функции, описани по-горе, за да разберете напълно какво и как се случва вътре в кода.

    Бонус. Защита от спамери

    Дори и най-малките WordPress сайтове често са бомбардирани със спам регистрации. Можете да пишете безкрайни условия за филтриране на ботове, често по-скоро като опит за създаване на изкуствен интелект 🙂 В случай на мултисайт, обичайното пренасочване в Apache ми помогна много, с което поисках да издам 404 при отваряне на /wp-signup.php и /wp-acitvate.php (не съм експерт по настройка на Apache, така че моите правила може да не са много правилни).

    RewriteEngine В RewriteBase / RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # НАЧАЛО на WordPress # Правила на WordPress по подразбиране :) # ... # КРАЙ на WordPress

    P.S. Опитвам се да опиша някои неща на трети страни възможно най-подробно, защото когато започнах, понякога нямаше кой да подкани и обясни много неща. Също така вярвам, че такива малки съвети за други материали ще накарат някого да научи нещо ново и да разшири областта си на познание. RewriteRule записи използват регулярни изрази, те не са никак сложни, например символът ^ означава началото на ред.