Eklenti etkinleştirildiğinde tetiklenecek bir işlevi kaydeder.
Bu işlev, belirtilen geri arama işlevini activate_ (eklenti) kancasına ekler ve bu kancanın etrafındaki bir sarmalayıcıdır.
activate_ (plugin) kancasındaki (eklenti), ana eklenti dosyasına göreli eklentinin adıyla değiştirilir. Örneğin, eklenti şu konumdaysa: wp-content / plugins / sampleplugin / sample.php, o zaman kanca adı: activate_sampleplugin / sample.php olacaktır.
3.1 sürümünden beri. kanca yalnızca eklenti etkinleştirme sırasında tetiklenir ve otomatik güncelleme Eklenti.
Nasıl çalışır
Eklenti, activate_ (eklenti) kancasının tetiklendiği activate_plugin () işlevi tarafından etkinleştirilir.
Çekirdekteki activate_plugin() işlevi, VI ortamı yüklendikten sonra çağrılır. Bu işlev, ana eklenti dosyasını (ve içinde belirtilen her şeyi) içerir ve ardından bir kanca aracılığıyla belirtilen geri arama işlevini etkinleştirir. Bu nedenle, eklentinin tüm işlevleri ve sınıfları geri çağırma işlevimizde mevcuttur. Ancak, VI ortamı yüklendiğinde tüm ana WP kancaları zaten tetiklendiğinden, ana eklenti dosyası bağlandığında, örneğin plugins_loaded gibi, kancalara asılan hiçbir eklenti olayı artık tetiklenmeyecektir. Bu, eklentimizin bağlanacağı, ancak tamamen bağlanmayacağı anlamına gelir: zaten etkinleştirildiğinde bağlanması gerektiği gibi değil.
Örneğin, bir eklenti plugins_loaded olayı sırasında bir şey yaparsa, eklenti etkinleştirildiğinde tüm bu eylemler gerçekleşmez. Örneğin, bir çeviri dosyasına bağlanırsa, register_activation_hook() için belirtilen geri çağırma işlevi tetiklendiği anda çeviri dosyası bağlanmayacaktır.
Kural olarak, geri arama işlevi tetiklendikten sonra, işlevleri kapatabileceğiniz 2 olay vardır: active_plugin ve kapatma.
Bir eklentiyi etkinleştirirken olağanüstü bir şey yapmak için örnek 5'e bakın.
Kullanım Şartları
Bir kanca tetiklendiği anda onu çağırırsanız, işlev çalışmaz, örneğin plugins_loaded, init. İşlev, doğrudan ana eklenti dosyasından çağrılmalıdır. Aktivasyon kuralları:
- Hook fonksiyonundan erişilebilmesi için global değişkenlerin (varsa) açık bir şekilde tanımlanması gerekir.
register_activation_hook(), Plugin Name: ... yönergesinin bulunduğu ana eklenti dosyasından çağrılmalı ve plugins_loaded veya init gibi herhangi bir kancadan çağrılmamalıdır.
Kanca işlevi, kanca ile aynı dosyada olmalı veya önceden başka bir dosyadan dahil edilmelidir.
Kanca işlevinde yankı çalışmaz. Çünkü bir yönlendirme var ve yankı görmeyeceksiniz. Ancak die() kullanılabilir.
Değişken kapsam hakkında bir not
Bir eklenti etkinleştirildiğinde, ana eklenti dosyası global kapsamda değil, activate_plugin () işlevinin içindedir. Bu nedenle, içinde yer alan değişkenler normal mod eklenti çalışmaları global kabul edilir, global olmaz.
Örneğin, register_activation_hook() işlevinde kullanılan işlev, bunları bu işlev içinde global olarak bildirmiş olsanız bile global değişkenleri görmeyebilir. Örnek:
$ myvar = "bir şey"; register_activation_hook (__ FILE__, "myplugin_activate"); function myplugin_activate () (global $ myvar; echo $ myvar; // Değişken, "bir şey"e eşit değildir)
Bu özellik nedeniyle, global değişkenler her zaman açıkça belirtilmelidir. Eklenti gövdesinde değişken belirtilmiş olsa bile tüm global değişkenler global olarak tanımlanmalıdır. Sadece bu durumda onlara her yerden erişim sağlanacaktır. Örnek:
küresel $ myvar; // bunun global bir değişken olduğunu açıkça belirtiyoruz $ myvar = "something"; register_activation_hook (__ FILE__, "myplugin_activate"); function myplugin_activate () (global $ myvar; echo $ myvar; //> bir şey)
Kanca yok.
İadeler
boş. Hiçbir şey döndürmez.
kullanım
register_activation_hook ($ dosya, $ fonksiyon); $ dosyası (dize) (gerekli) Eklentinin adını da içeren, eklentinin ana php dosyasının yolu. Genellikle sihirli PHP sabiti __FILE__ kullanılır. $ işlevi (string / dizi / lambda) (gerekli)Geri arama işlevinin adı. Sınıflar için bir dizi kullanın: dizi ($ this, "function_name"); ...
İşlev, çoklu site olduğunda eklentinin tüm site ağı için etkinleştirilip etkinleştirilmediğine dair bir boole değişkeni $ network_wide alacaktır.
Örnekleri
#1. Bir eklentiyi etkinleştirirken bir işlevi çalıştırma
Ana eklenti dosyasında bir my_plugin_activate () fonksiyonumuz olduğunu varsayalım: wp-content / plugins / myplugin / myplugin.php, ardından eklenti aktivasyonu sırasında bu fonksiyonu çalıştırmak için aşağıdaki kodu kullanın:
Register_activation_hook (__ FILE__, "my_plugin_activate"); function my_plugin_activate () (// Aktivasyon kodu ...)
# 2. Bir sınıf yöntemini çalıştırma
Eklenti kullanılıyorsa PHP sınıfı, aktivasyon kodu şu şekilde eklenir:
Register_activation_hook (__ FILE__, dizi ("My_Plugin", "install")); class My_Plugin (statik fonksiyon kurulumu () (// Burada herhangi bir çıktı oluşturmayın ...))
# 3. Ayrı bir dosyadan bir sınıf yöntemi çalıştırma
Aktivasyon fonksiyonunu içeren sınıf ise ayrı dosya, ardından etkinleştirme işlevini şu şekilde kaydedin:
Include_once __DIR__. "/class-My_Plugin.php"; register_activation_hook (__ FILE__, dizi ("My_Plugin", "on_activate_function"));
#4. Sınıfın kendisinden bir sınıf yöntemi çalıştırma
__construct () içindeyseniz. Önemli olarak, __FILE__ ana eklenti dosyasına "bakmalıdır":
Register_activation_hook (__ FILE__, dizi ($ this, "YOUR_METHOD_NAME"));
# 5 Eklentiyi etkinleştirdikten hemen sonra bir şeyler yapın
Eklentiyi etkinleştirdikten sonra yalnızca iki kanca tetiklenir: active_plugin ve kapatma.
Bir eklentiyi etkinleştirdikten hemen sonra bir şeyler yapmanız gerektiğinde, onlara bir işlev ekleyebilirsiniz.
Böyle bir çözüm işe yaramadığında, WP seçeneklerini kullanabilirsiniz: verileri bir seçeneğe kaydedin ve ardından seçeneği kontrol edin ve bir seçenek varsa bir şeyler yapın:
// Ana eklenti dosyası. ... function my_plugin_activate () (// daha sonra yapılacak bir şey varsa bir seçenek ekleyin. add_option ("Activated_Plugin", "Plugin-Slug"); // İşte aktivasyon kodu ...) register_activation_hook ( __ DOSYA__, " my_plugin_activate "); function load_plugin () (if (is_admin () && get_option ("Activated_Plugin")") == "Plugin-Slug") (// artık çalışmaması için eklenen seçeneği kaldırın // ve ihtiyacımız olanı yapın ... delete_option ( "Activated_Plugin "); // Eklentiyi etkinleştirdikten sonra bir kez bir şeyler yapın // Örneğin: add_action (" init "," my_init_function ");)) add_action (" admin_init "," load_plugin ");
Eklenti aktivasyonu sırasında bir şeyler yapmak için başka bir seçenek de etkinliğinizi şu şekilde oluşturmaktır:
my_plugin_activate () işlevi (// Eklentinin kendi dosyalarından ekleyebilmeniz için kendi kancamızı kurun do_action ("my_plugin_activate");) register_activation_hook (__ FILE__, "my_plugin_activate");
# 6 İşlevi kullanmanın başka bir gösterimi
İşlevin nasıl kullanılacağını gösteren küçük bir eklenti:
/ * Eklenti Adı: Bir Test Açıklaması: Bir Test * / require_once dizini (__ FILE__). "/my_other_file.php"; / * Bu kod çalışmayacak. Aktivasyon kancası ana dosyadan çağrılmalıdır. register_activation_hook (dizi adı (__ FILE__). "/my_other_file.php", "my_other_function"); * / // Bu çalışan koddur. register_activation_hook (__ DOSYA__, "test_activated"); / * Global değişkenleri bildirmenin ve bunlara erişmenin doğru yolu budur. Global değişkenler açıkça bildirilmelidir. Bu olmadan, onlara erişiminiz olmayacak. * / global $ bazı_var; $ bazı_var = "hey"; // Aktivasyon fonksiyonu function test_activated () (// burada $ some_var hey global $ some_var'a eşit olmayacak; // Ve burada $ some_var hey'e eşit olacak // Bu fonksiyon "my_other_file.php" dosyasında tanımlanmıştır my_other_function () ; / * Bu işe yaramaz. Günlükleri geçici bir dosyaya yazmanız gerekiyorsa, fopen / fwrite kullanın. Aktivasyon kancasının çalışıp çalışmadığını test etmek istiyorsanız, kanca işlevi içinde çıkış () kullanın. * / echo " test_activated çağrıldı!";)
Standart wp-signup.php yerine multisite için kendi kayıt sayfamızı oluşturuyoruz.
V normal kurulum WordPress sayfası kayıt (yetkilendirme, parola sıfırlama) wp-login.php dosyasının çıktısını verir.
- /wp-login.php - yetkilendirme
- /wp-login.php?action=register - kayıt
- /wp-login.php?action=lostpassword - parola sıfırlama
wp-login.php'de multisite için ayrı koşullar vardır. Bu nedenle, bir çoklu sitede /wp-login.php?action=register bağlantısını tıkladığınızda, WordPress /wp-signup.php sayfasına yönlendirilecektir. Birçok temada sayfa çok çekici görünmüyor, bu yüzden kendimizinkini yapacağız.
Ağın ana sitesi
WordPress varsayılan olarak ağın ana etki alanında (site) bir kayıt sayfası (wp-signup.php) açar. Ancak, farklı temalara sahip olsalar bile ağdaki her site için ayrı bir kayıt sayfası oluşturmak mümkündür. Ağdaki tüm sitelerin kendi kayıt sayfasına sahip olduğu, ancak aynı temanın kullanıldığı ve sitelerin yalnızca dilde farklılık gösterdiği durumu ele alacağız. Farklı temalar kullanılıyorsa, daha fazla kod yazılması gerekecektir.
fonksiyonlar.php?
Numara. Bu dosyanın adı her WordPress makalesinde geçiyor gibi görünüyor. Bizim durumumuzda, kayıt işlevselliği birkaç site için tasarlandığından, herhangi bir siteyi açtığınızda yüklenen MU eklentilerine taşımak mantıklıdır.
lirik arasöz
MU eklentilerinin normal eklentilerden daha erken ve WordPress çekirdeği tamamen yüklenmeden önce yüklendiğini belirtmekte fayda var, bu nedenle bazı işlevlerin çağrılması PHP'de ölümcül hatalara neden olabilir. Bu "erken" yüklemenin de avantajları vardır. Örneğin, herhangi bir temanın içinde, function.php dosyası temadan yüklenmeden önce tetiklenen bazı eylemlere tutunamazsınız. Buna bir örnek, Jetpack'teki modüllerin etkinliğini izlemenin mümkün olduğu jetpack_module_loaded_İLİŞİLİ-posts (ilgili gönderiler - modülün adı) biçimindeki Jetpack eklentisinin eylemleridir. Tema dosyasından bu eyleme "yapışmak" imkansızdır, çünkü eylem tema yüklenmeden önce zaten tetiklenmiştir - eklentiler temalardan önce yüklenir. Codex'teki Eylem Referans sayfasında WordPress yükleme sırasının genel bir resmine göz atabilirsiniz.
Dosya sırası
MU eklentileri, herhangi bir sayıda dosya ve size mantıklı görünen herhangi bir yapı içerebilir. Bu hiyerarşi gibi bir şeye bağlıyım:
| -mu-eklentiler | - | -load.php | - | - | -selena-network | - | - | - | -kayıt | - | - | - | - | -plugin.php | - | - | - | - | -... | - | - | - | -jetpack | - | - | - | - | -plugin.php
Ağımız için gerekli tüm "eklentiler" load.php dosyasına bağlanır:
// Tüm eklentiler için Çevirileri Yükle load_muplugin_textdomain ("selena_network", "/ selena-network / diller /"); // Ağ Kaydı WPMU_PLUGIN_DIR gerektirir. "/selena-network/signup/plugin.php"; // Başka eklentiler // WPMU_PLUGIN_DIR gerektirir ...
Selena-network klasörünün içinde, her birinin load.php'ye dahil ettiğimiz kendi plugin.php'si olan eklenti klasörleri saklanır. Bu size esneklik ve işleri hızlı bir şekilde kapatıp açma yeteneği verir.
Kayıt sayfası adresi
Kayıt sayfasının adresini belirtmek için wp_signup_location filtresi kullanılır. wp-login.php dosyasının içinde bulunabilir ve wp-signup.php'ye yönlendirmeden sorumludur.
Case "register": if (is_multisite ()) (wp_redirect (apply_filters ("wp_signup_location", network_site_url ("wp-signup.php"))); çıkış;
Mevcut sitedeki kayıt sayfasının adresini döndürecek olan mu-plugins / selena-network / signup / plugin.php dosyasına fonksiyonumuzu ekleyelim:
fonksiyon selena_network_signup_page ($ url) (home_url'ye dön (). "/ Signup /";) add_filter ("wp_signup_location", "selena_network_signup_page", 99);
selena_network, çarpışmaları önlemek için sitemdeki MU eklentilerinin içindeki tüm işlevlerin adlarında kullandığım önek, kendi benzersiz önekimle değiştirilmelidir. Filtrenin önceliği 99'dur çünkü bbPress ve BuddyPress gibi bazı eklentiler bu URL'nin üzerine kendi URL'lerini yazabilir (MU eklentileri normal eklentilerden daha erken yüklenir, yukarıya bakın). Ziyaretçiyi aynı etki alanında tutmak için network_site_url () yerine home_url () kullanıldığını unutmayın. Adres olarak herhangi bir URL kullanılabilir.
Bir sayfa yarat
Şimdi normal arayüz üzerinden site.com/signup/ adresiyle bir sayfa oluşturalım ve alt tema klasöründe yeni sayfamızın şablonu page-signup.php'dir. "Kayıt" kelimesi yerine benzersiz bir kimlik kullanılabilir.
Yeni şablonun içinde, kayıt formunu görüntüleyecek olan selena_network_signup_main() işlevini çağırmanız gerekir.
Şablonlarla tüm sürecin gerekli olmadığını ve bunun yerine selena_network_signup_main () işlevini de çağıracak kendi kısa kodunuzu oluşturabileceğinizi belirtmekte fayda var.
wp-signup.php ve wp-activate.php
Şimdi kayıt formunu gösterecek bir fonksiyon oluşturmaya başlayalım. Bunu yapmak için wp-signup.php ve wp-activate.php dosyalarını WordPress kökünden mu-plugings / selena-network / signup / dizinine kopyalayın (ve bunları mu-plugins / selena-network içine bağlamayı unutmayın) / kayıt / plugin.php) ... Dosyalarla daha fazla manipülasyon yapmak son derece zor ve tarif etmek zaman alıcıdır, bu yüzden bunları kendiniz yapmanız gerekecektir. Sadece tam olarak ne yapılması gerektiğini anlatacağım ve projemin kaynak dosyalarını yayınlayacağım:
- Dosyanın başında, tüm gereksinimleri, işlev çağrılarını ve işlevlerin dışındaki diğer kodları kaldırın.
- Adlara benzersiz önekler ekleyerek tüm işlevleri yeniden adlandırın.
- wp-signup.php kodunun alt kısmını selena_network_signup_main işlevine sarın ve en başa global $ active_signup yazın; ...
- Düzeni doğru yerlerde kendi düzeninizle değiştirin.
wp-activate.php içinde, yaklaşık olarak aynısını yapmanız gerekir:
- İşlevlerin dışındaki tüm kodları kaldırın, düzeni ayrı bir işleve sarın.
- Gerektiğinde düzeni değiştirin.
wp-activate.php dosyası hesap aktivasyon sayfasından sorumludur. Kayıt sayfasında olduğu gibi, bunun için de wp-activate.php dosyasından işlevi çağırdığınız ayrı bir şablon oluşturmanız gerekir.
Aktivasyon mektupları gönderiyoruz
Kayıt sayfası, ziyaretçiye hesabını etkinleştirmesi için bir bağlantı içeren bir e-posta gönderir. Varsayılan olarak bu, ms-functions.php dosyasındaki wpmu_signup_user_notification () işlevi tarafından yapılır. İşlevselliği, işleviniz için ödünç alınabilir. Bu özelliği kullanmayı bırakmanın nedeni, wp-activate.php adresinden hesap aktivasyon bağlantısını göndermesidir. Bu işlevi wpmu_signup_user_notification filtresini kullanarak false vererek "devre dışı bırakabilirsiniz" (bunu yapmazsanız, aktivasyon mektubu iki kez gönderilecektir, tamam, aslında iki farklı harf).
Armyofselenagomez_wpmu_signup_user_notification işlevi ($ user, $ user_email, $ key, $ meta = array()) (// ... // wpmu_signup_user_notification() işlevinden kod wp_mail ($ user_email, wp_specialchars_decode ($ message_headers), $ mesaj), $ ; false döndür;) add_filter ("wpmu_signup_user_notification", "armyofselenagomez_wpmu_signup_user_notification", 10, 4);
Sonuç olarak, Selena temasındaki kayıt sayfası çok daha temiz ve daha doğru görünüyor.
Çözüm
Aynısını İnternette yapmanın pek doğru olmayan başka yolları da var - Apache yönlendirmeleri, Java Script olmadan çalışmayacak AJAX formları, vb. kendi web sitesi.
Dosyaları dikkatli bir şekilde düzenlemeniz ve orijinalinden fazla sapmamaya çalışmanız gerektiğini unutmayın, böylece daha sonra WordPress wp-signup.php ve wp-activate.php dosyalarını değiştirirse, değişiklikleri bulmak için bunları karşılaştırmak daha kolay olacaktır.
bakmayı unutma kaynak Kodun içinde ne ve nasıl olduğunu tam olarak anlamak için yukarıda açıklanan tüm işlevler.
Bonus. Spam gönderici koruması
En küçük WordPress siteleri bile sık sık spam kayıtlarına maruz kalır. Botları filtrelemek için sonsuz koşullar yazabilirsiniz, genellikle daha çok yaratmaya çalışmak gibi. yapay zeka🙂 Çoklu site durumunda, Apache'deki olağan yönlendirme bana çok yardımcı oldu, bunun yardımıyla /wp-signup.php ve /wp-acitvate.php'yi açarken bir 404 istedim (ben istemiyorum konusunda uzman Apache'yi yapılandırma bu yüzden kurallarım çok doğru olmayabilir).
RewriteBase'de RewriteEngine / RewriteRule ^ wp-signup \ .php - RewriteRule ^ wp-activate \ .php - # BEGIN WordPress # Varsayılan olarak WordPress kurallarına dokunmayın :) # ... # WordPress'i Bitir
P. S. Bazı üçüncü şahıslara ait şeyleri olabildiğince ayrıntılı bir şekilde açıklamaya çalışıyorum, çünkü başladığımda bazen soracak ve birçok şeyi açıklayacak kimse yoktu. Ayrıca, diğer materyallerle ilgili bu tür küçük ipuçlarının, birini yeni bir şeyler öğrenmeye ve bilgi alanlarını genişletmeye iteceğine inanıyorum. RewriteRule girişlerinde normal ifadeler kullanılır, bunlar hiç de karmaşık değildir, örneğin, ^ karakteri bir satırın başlangıcı anlamına gelir.
Aynı anda birden fazla site için bir WordPress kurulumunu kullanmanıza izin verir. Aynı zamanda, her site benzersiz bir önekle veritabanında kendi tablolarını alır.
Kayıtlı kullanıcıların verilerini içeren tablolar, ağdaki tüm siteler için ortaktır. Bu kesin bir artıdır ve bir kez kaydolarak birçok siteye erişebilirsiniz. Ayrıca her sitede aynı hesap farklı haklara sahip olabilir. Örneğin, bir sitede bir kullanıcı editör, diğerinde ise yönetici olabilir.
Tipik bir WordPress kurulumunda, kayıt, oturum açma ve parola sıfırlama sayfası, wp-login.php dosyasının çıktısını verir.
- wp-login.php - yetkilendirme
- wp-login.php?eylem = kayıt - kayıt
- wp-login.php?action = kayıp şifre - şifre sıfırlama
Multisite modunda, WordPress çekirdeği biraz farklı davranmaya başlar ve wp-login.php? Bu, varsayılan WordPress sitesi olan ağ kayıt sayfanızdır.
Normal kullanıcı hesaplarını kaydetmeye ek olarak, süper yönetici bu özelliği ağ ayarlarında etkinleştirmişse (Ağ Yöneticisi → Ayarlar → Ağ Ayarları) üzerinde yeni bir web sitesi oluşturabilirsiniz.
Çoğu temada kayıt sayfası pek iyi görünmüyor. Birçok dış görünüm, sayfalardaki farklı öğeleri stillendirmek için Bootstrap gibi CSS çerçevelerini ve kendi özel sınıflarını kullanır, bu nedenle herkes için çalışan tek bir HTML yazmak zordur.
Ancak sayfa düzensiz görünüyorsa umutsuzluğa kapılmayın. wp-signup.php dosyası, sitenin her ayrıntısı üzerinde çalışmak için zaman olmadığında, ilk başta harika bir şeydir - başkalarına daha fazla odaklanabilirsiniz. önemli sayfalar ve içerik.
Kendi kayıt sayfanızı oluşturmaya hazır olduğunuzda, wp-signup.php, WordPress'in kullanıcı girdisini işlemek ve doğrulamak ve yeni hesaplar oluşturmak için sağladığı çeşitli işlevleri anlamanıza yardımcı olacak iyi bir örnek ve örnek olacaktır.
Ağın ana sitesi
WordPress varsayılan olarak ağın ana etki alanında (site) bir kayıt sayfası (wp-signup.php) açar. Ancak, bir temaları olsa bile ağdaki her site için kayıt sayfaları oluşturabilirsiniz.
Ağdaki tüm sitelerin aynı temayı kullandığı, ancak her birinin bir kayıt sayfası olduğu durumu ele alacağız. Sitelerin dili (İngilizce ve Rusça) farklıdır, bu nedenle kayıt sayfası sitenin "yerel" dilinde görüntülenecektir. Siteler farklı temalar kullanıyorsa, her şey ne tür temalar olduklarına, aynı düzenin onlara uygun olup olmadığına (sizi tüm temalarınızı birleştirmeye zorlayabilecek harika bir durum) veya sayfaları tek tek çalışmaya değip değmeyeceğine bağlı olacaktır.
function.php'ye alternatif
Dosya sırası
MU eklentileri, size mantıklı görünen herhangi bir sayıda dosya ve yapı içerebilir. Bu hiyerarşi gibi bir şeye bağlıyım:
| mu-eklentileri | | yük.php | | selena ağı | | | kayıt | | | | eklenti.php | | | ... | | | jet çantası | | | | eklenti.php
load.php dosyası çevirileri ve gerekli tüm "eklentileri" içerir:
// MU eklentileri için çevirileri yükle load_muplugin_textdomain ("selena_network", "/ selena-network / diller /"); // Kayıt sayfası için işlevsellik için WPMU_PLUGIN_DIR gerekir. "/selena-network/signup/plugin.php"; // Başka bir eklenti // WPMU_PLUGIN_DIR gerektirir ...
Eklenti klasörleri, selena-network dizini içinde saklanır. Her birinin load.php içine dahil ettiğimiz kendi plugin.php dosyası vardır. Bu, acil durumda çalışan bir projedeki bireysel bileşenleri anında devre dışı bırakma ve etkinleştirme esnekliği ve yeteneği sağlar.
Kayıt sayfası
Kodu nereye ve nasıl yazacağımızı anladıktan sonra kayıt sayfasını oluşturmaya geçebiliriz.
Normal bir arayüz üzerinden example.org/signup/ adresinde bir sayfa oluşturalım. Adres olarak projenize uygun görünen herhangi bir URL'yi kullanabilirsiniz.
Gerekli kayıt sayfasına yönlendirin
WordPress'in bizim hakkında bilgi sahibi olmasını sağlamak için yeni sayfa kayıt olun ve ona bir yönlendirme yapın, "Kayıt Ol" bağlantısını tıkladığınızda wp_signup_location filtresi kullanılır. wp-login.php içinde bulunabilir ve wp-signup.php'ye varsayılan yönlendirmeden sorumludur.
Case "register": if (is_multisite ()) (wp_redirect (apply_filters ("wp_signup_location", network_site_url ("wp-signup.php"))); çıkış; // ...
Hatırladığınız gibi, varsayılan olarak, ağın ana etki alanında kayıt sayfası açılır. Bu nedenle burada network_site_url() kullanılmıştır.
Mevcut sitedeki kayıt sayfasının adresini döndürecek olan mu-plugins / selena-network / signup / plugin.php içindeki filtreye işleyicimizi ekleyelim:
fonksiyon selena_network_signup_page ($ url) (home_url'ye dön ("kaydolma"));) add_filter ("wp_signup_location", "selena_network_signup_page", 99);
selena_network, çarpışmaları önlemek için sitemdeki MU eklentilerinin içindeki tüm işlevlerin adlarında kullandığım önek, kendi benzersiz önekimle değiştirilmelidir. Filtrenin önceliği 99'dur çünkü bbPress ve BuddyPress gibi bazı eklentiler bu URL'nin üzerine kendi URL'lerini yazabilir (MU eklentileri normal eklentilerden daha erken yüklenir, yukarıya bakın).
network_site_url ()'den farklı olarak, ağın ana sitesini değil, mevcut sitenin adresini döndüren home_url () öğesinin kullanıldığını unutmayın.
İşlevsellik wp-signup.php
wp-signup.php dosyası birçok işlev ve kod içerir. Büyük resmi görmek için kod katlamayı kullanabilirsiniz. Buna İngilizce'de genellikle "kod katlama" denir.
Dosyanın en başında 1'den 80 satıra kadar (sürüm 4.1.1'de), sayfanın "başlangıcı"nın çeşitli kontrolleri ve çıktıları get_header () kullanılarak gerçekleştirilir.
Daha sonra, birçok yöntem bildirilir ve onlarla çalışmaya başlamadan önce, her bir işlevin ne yaptığını anlamaya değer. Bunların çoğu genellikle, içinde wpmu_ öneki olan diğer işlevleri kullanır ve bunların tümü wp-includes / ms-functions.php dosyasında bildirilir. Kodu kendiniz görmeden bu bölümü anlamak zor. Aşağıda, zorluklarla karşılaşmanız durumunda ana işlevlerin kısa bir açıklaması bulunmaktadır.
- wpmu_signup_stylesheet () - Kayıt sayfasında ek CSS çıktısı alır.
- show_blog_form () - site kaydı için alanlar (adres, ad, arama motorları için görünürlük).
- validate_blog_form () - wpmu_validate_blog_signup () kullanarak girilen site adresini ve adını doğrulayın.
- show_user_form () - kullanıcı kaydı için alanlar (oturum açma ve e-posta adresi).
- validate_user_form () - girilen oturum açma ve e-posta adresinin doğrulanması. wpmu_validate_user_signup () kullanarak posta.
- signup_another_blog () - sitede zaten kayıtlı olan kullanıcılar için show_blog_form () kullanarak yeni siteler kaydetmek için alanlar.
- validate_another_blog_signup () - validate_blog_form () kullanarak site url'sini ve başlığını doğrular.
- signup_user (), kayıt sayfası alanlarını görüntülemek için ana işlevdir.
- validate_user_signup () - kullanıcı adını ve e-posta adresini doğrular. validate_user_form () kullanarak posta.
- signup_blog () - show_blog_form () kullanarak sitenin adresini, adını ve görünürlüğünü girmek için alanlar (kaydın ikinci adımı).
- validate_blog_signup () - giriş, e-posta adresini kontrol eder. posta, adres ve site adı.
wp-signup.php dosyasının en altında (sürüm 4.1.1'deki 646 satırından), yukarıda açıklanan tüm yöntemleri kullanan kayıt sayfasının ana mantığı. Kodun bu kısmı bir fonksiyona taşınmaz. Sonunda get_footer() çağrılır.
wp-signup.php'nin işlevselliğini kopyalayın
Daha sonra, wp-signup.php dosyasını MU eklentilerine kopyalama ve "çatal" üzerinde değişiklik yapma prosedürünü anlatacağız. Belki de bu gitmek için doğru yol gibi görünmeyebilir. Bunun yerine, normal işlevler yerine sınıfları kullanarak kendi form doğrulamanızı yazabilir ve işlevleri sıfırdan görüntüleyebilirsiniz. Bence wp-signup.php sayfamız için gerekli tüm mantığa zaten sahip, geriye sadece küçük değişiklikler yapmak kalıyor.
WordPress'i güncellediğinizde, wp-signup.php zaman zaman değişir, ancak bu, her sürümde çatalınızı senkronize etmeniz gerektiği anlamına gelmez. wp-signup.php içindeki işlevler aslında yalnızca HTML çıktısı, veri doğrulama, hesap ve site oluşturma, ms-functions.php içinde bildirilen wpmu_ önekine sahip yöntemler ile ilgilidir.
Sayfada kayıt formunu gösterecek bir fonksiyon oluşturmaya başlayalım. Bunu yapmak için wp-signup.php dosyasını WordPress kökünden mu-plugings / selena-network / signup / dizinine kopyalayın. Onu mu-plugins/selena-network/signup/plugin.php içine bağlayalım).
WPMU_PLUGIN_DIR gerektirir. "/selena-network/signup/wp-signup.php";
Kopyalanan dosyanın en başından tüm gerekli ve gereksiz kontrolleri kaldırın. 4.1.1 sürümünde, 1'den 80 satıra kadar olan tüm kod budur.
Artık kayıt formunu görüntülemek için ana işlevi oluşturmaya hazırız. Bunu yapmak için, tüm mantığı 646 satırından dosyanın en sonuna kadar selena_network_signup_main adlı bir işleve taşıyın. En sonunda, iki ekstra kapanışı kaldıracağız