AD PHP'yi etkinleştirin. WordPress MultiSit'te kendi kayıt sayfanızın nasıl oluşturulması

Aynı anda birden fazla site için bir Wordpress ayarını kullanmanızı sağlar. Aynı zamanda, her bir bölge, benzersiz bir önek ile veritabanında kendi tablolarını alır.

Tüm ağ sitelerinde ortak kullanıcıların verilerine sahip tablolar. Bu belirli bir artı ve bir gün kaydolmak birden fazla siteye erişebilirsiniz. Ayrıca, her sitede, aynı hesap farklı haklara sahip olabilir. Örneğin, bir sitede, kullanıcı editör olabilir ve başka bir yöneticiye olabilir.

Her zamanki kurulumda Wordpress sayfası Kayıt, yetkilendirme ve şifre sıfırlama, WP-login.php dosyasını görüntüler.

  • wp-login.php - Yetkilendirme
  • wp-login.php? Eylem \u003d Kayıt Ol - Kayıt
  • wp-login.php? Eylem \u003d lostpassword - şifre sıfırlama

Multisite modunda, WordPress çekirdeği biraz farklı davranmaya başlar ve WP-login.php linkine geçerken? Eylem \u003d Kayıt, WP-Signup.php'de bir yönlendirme alacaktır. Bu, Wordpress'te varsayılan olan ağınızın kayıt sayfasıdır.

Sıradan kullanıcı hesaplarını kaydetmenin yanı sıra, Superministrator, ağ ayarlarında (ağ ayarları) böyle bir fırsatı etkinleştirdiyse, üzerinde yeni bir site oluşturabilirsiniz.

Çoğu konuda, kayıt sayfası çok iyi görünmüyor. Birçok tema, Bootstrap gibi CSS çerçeveleri ve sayfalardaki farklı öğelerin stilizasyonu için kendi özel sınıfları tarafından kullanılır, bu nedenle herkes için uygun olacak tek bir HTML yazmak zordur.

Ancak sayfa düzensiz görünüyorsa umutsuzluğa kapılmamalısınız. WP-Signup.php dosyası ilk başta harika bir şey, sitenin her bir kısmını çözmek için zaman yoksa - diğerlerine daha fazla odaklanabilirsiniz Önemli sayfalar ve içerik.

Yapmaya hazır olacağını sayfa Kayıt, WP-SignUp.php, WordPress'in kullanıcılar tarafından girilen verilerin işlenmesi ve doğrulanması sağladığı işlevlerin spektrumunu anlamak kolay olduğu iyi bir örnek ve bir örnek olacaktır.

Ana Web Sitesi Ağı

Varsayılan olarak, WordPress, ana etki alanı (web sitesi) ağındaki kayıt sayfasını (WP-Signup.php) açar. Bununla birlikte, konulara sahip olsalar bile, her şebeke için kayıt sayfaları oluşturabilirsiniz.

Bir konunun tüm ağ sitelerinde kullanıldığında durumunu düşüneceğiz, ancak her birinde bir kayıt sayfası var. Siteler dilde (İngilizce ve Rusça) farklılık gösterir, bu nedenle kayıt sayfası "Yerel" dil sitesinde gösterilecektir. Siteler farklı konular kullanıyorsa, her şey onlara aynı düzene uyacak konulara bağlı olacaktır (tüm konularını birleştirmeye zorlayabilecek mükemmel bir durum) veya sayfaları ayrı ayrı çalışmaya değer.

Fonksiyonlara alternatif.php.

Dosyalarda sipariş

MU-Plugins, herhangi bir sayıda dosyayı ve size mantıklı görünecek bir yapı içerebilir. Böyle bir hiyerarşiye uyuyorum:

| Mu-plugins | | Load.php | | Selena-Network | | | Kayıt | | | | eklentisi.php | | | ... | | | | jetpack | | | | eklentisi.php.

LOAD.PHP dosyasında, çeviriler ve gerekli tüm "eklentiler" bağlanır:

// MU-Plugins Load_muplugin_textDomain ("Selena_network", "/ Selena-Network / Diller /" için Transferler Yükleme; // kayıt sayfası için fonksiyonel WPMU_PLUGIN_DIR gerektirir. "/Selena-Network/signup/plugin.php"; // başka bir eklenti // wpmu_plugin_dir gerektirir ...

Selena-Network dizininin içinde, eklenti klasörleri saklanır. Her birinin LOAD.PHP'ye bağlandığımız kendi eklentisi.php vardır. Esneklik ve anında devre dışı bırakma ve açma yeteneği verir ayrı bileşenler Acil bir durum durumunda çalışma projesinde.

Kayıt sayfası

Nerede ve nasıl kod yazacağımızla anlaşılan, kayıt sayfasının oluşturulmasına gidebilirsiniz.

Her zamanki arabirimden bir example.org/signup/ ile bir sayfa oluşturun. Bir adres olarak, projeniz için uygun görünen bir URL'yi kullanabilirsiniz.

İstenilen kayıt sayfasına yönlendir

WordPress'in yeni kayıt sayfamız hakkında bilgi edilmesi ve üzerine bir yönlendirme yapması için, "Kayıt" bağlantısına tıkladığınızda, WP_SignUp_Location filtresi kullanılır. WP-login.php içinde bulunabilir ve varsayılan WP-Signup.php'deki yönlendirmeden sorumlu olan budur.

Durum "Kayıt Ol": if (iS_Multisite ()) (wp_redirect (Apple_Filect ("wp_signup_location", network_site_url ("wp-signup.php")); çıkış; // ...

Nasıl hatırlarsınız, varsayılan olarak, kayıt sayfası ağın ana alanında açılır. Bu yüzden network_site_url () burada kullanılıyor.

Mevcut sitedeki kayıt sayfasının adresi verilecek olan Filtre İşleyicinizi MU-Plugins / Selena-Network / Summup / Plugin.php'e ekleyin:

Fonksiyon selena_network_signup_page ($ url);) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_Network - Sitemdeki tüm fonksiyonların adlarında kullandığım, çakışmaları önlemek için kendi benzersiz öneki ile değiştirilmelidir. Filtrenin (99) eklenmesinin önceliği, çünkü BBRESS ve Buddypress gibi bazı eklentiler bu adresin kendi cihazınıza yazabileceği (MU-Plugins, geleneksel eklentilerden daha önce yüklenir).

Lütfen, Network_Site_URL () 'nin aksine, ana şebeke sitesinin adresini verdiğini, home_url () kullanıldığını lütfen unutmayın.

Wp-signup.php işlevselliği

Wp-signup.php dosyası içeriyor çok sayıda İşlevler ve kod. Resmi bir bütün olarak görmek için katlama kodunu kullanabilirsiniz. Kural olarak, İngilizce olarak "Kod katlama" denir.

Dosyanın başlangıcında 1 ila 80, çizgi (4.1.1 sürümünde), çeşitli kontroller yapılır ve Get_header () kullanarak "Başlat" sayfasını çıkarır.

Daha sonra, birçok yöntem ilan edilir ve onlarla çalışmaya başlamadan önce, her işlevi neyin yaptığını anlamaya değer. İçeride, bunların çoğu sıklıkla WPMU_ öneki ile diğer fonksiyonlar kullanılır, hepsi WP içeren / MS-Functions.php dosyasında ilan edilir. Bu bölümde kodu kendiniz görmeden anlamak zordur. Zorluk çekmeniz durumunda temel işlevlerin küçük bir açıklamasının altında.

  • wpmu_signup_stylesheet () - Kayıt sayfasında ek CSS çıkışı.
  • show_blog_form () - Site kaydı için alanlar (adres, arama motorları için ad görülürlük).
  • validate_blog_form () - Girilen site adresini ve adlarını wpmu_validate_blog_signup () kullanarak kontrol edin.
  • show_user_form () - kullanıcıyı kaydetme alanları (giriş ve e-posta adresi).
  • validate_user_form () - Girilen giriş ve adresleri kontrol etmek. Wpmu_validate_user_signup () ile posta.
  • signup_Another_Blog () - Sitede zaten kayıtlı olan kullanıcılar için Show_Blog_Form () kullanarak yeni siteleri kaydetme alanları.
  • validate_another_blog_signup () - Site adresini ve adını Validate_Blog_Form () kullanarak kontrol eder.
  • signUp_User (), kayıt sayfasının alanını çıkartmanın ana işlevidir.
  • validate_user_signup () - Giriş ve e-posta adresini kontrol eder. Validate_user_form () ile posta.
  • signup_Blog () - show_blog_form () kullanarak sitenin adresi, adını ve görünürlüğünü (ikinci kayıt adımını) girmek için alanlar.
  • validate_blog_signup () - Giriş, e-posta adresini kontrol eder. Posta, adres ve site adı.

WP-Signup.php dosyasının en altında (4.1.1 sürümünde 646 dikişten), yukarıdaki yöntemleri kullanan kayıt sayfasının ana mantığı. Kodun bu kısmı fonksiyona gönderilmemektedir. Sonunda, get_footer () denir.

Fonksiyonel wp-signup.php kopyalayın

Daha sonra, bir WP-SignUp.php'ün MU tabancalarındaki kopyalama prosedürü açıklanacak ve çatal olarak değişiklik yapılması. Doğru şekilde görünmeyebilir. Bunun yerine, geleneksel fonksiyonları olmayan sınıfları kullanarak formları kontrol etmek ve çıktılar için işlevlerinizi sıfırdan yazabilirsiniz. Bence, wp-signup.php zaten sayfamız için gerekli tüm mantığa sahip, sadece küçük değişiklikler yapmak için kalır.

WordPress'i güncellerken, WP-Signup.php, zaman zaman değişir, ancak bu, her sürümün "FORC" olarak senkronize etmek zorunda kalacağı anlamına gelmez. WP-SignUp.php içindeki fonksiyonlar esasen yalnızca HTML çıkışı tarafından yapılması, veri kontrolü, hesaplar ve siteler oluşturma, MS-Functions.php'de bildirilen WPMU_ öneki ile yapılır.

Sayfadaki kayıt formunu görüntüleyen bir işlev oluşturacağız. Bunu yapmak için, WP-SignUp.php dosyasını MU-Plugings / Selena-Network / SignUp / 'de WordPress kökünden kopyalayın. MU-Pugins / Selena-Network / Summup / Plugin.php) içine bağlayın.

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

Kopyalanan dosyanın başlangıcından gelen tüm ihtiyaçları ve gereksiz kontrolleri silin. 4.1.1 sürümünde, bu, 1 ila 80 satırdan tüm koddur.

Şimdi kayıt formunu görüntülemek için ana işlevi oluşturmaya hazırız. Bunu yapmak için, 646 satırındaki tüm mantıklar ve dosyanın sonuna kadar Selena_network_signup_main adlı işleve aktarılacağız. Sonunda, iki gereksiz kapanmayı silersiniz

(722 ve 723 satırları), ayrıca arayın Get_Footer ().

Yeni oluşturulan Selena_Network_signup_main () 'de en başında, bu dosya kullanımından gelen diğer tüm yöntemlerin kullandığı Global Değişken Active_signup'u ilan edeceğiz. Ve dosyanın başlangıcından silindiğimiz öncesi_signup_form olay çağrısını ekleyin.

Fonksiyon selena_network_signup_main () () (Global $ Active_signup; do_action ("Önce_signup_form"); // ...)

Şimdi sadece gerekli olduğu her yerde yerleşimi değiştirmek için kalır ve kayıt sayfası hazır.

Kayıt formunun çıkışı

Burada en az iki seçenek var. Bir kısa kod oluşturmak ve her zamanki editör aracılığıyla sayfaya yerleştirmenin daha uygun bir yolu.

// network_signup add_shortcode shortcode ("network_signup", "selena_network_signup_main") oluşturmak;

İkinci seçenek, Kızı Tema klasöründe bir sayfa-signup.php sayfası oluşturmaktır. "Kayıt" kelimesi yerine, sayfaya atanan benzersiz bir kimliği kullanabilirsiniz. Şablonun içinde, gerekli düzeni ekleyin ve doğru yerde bir SELENA_NETWORK_SIGNUP_MAIN () seçin.

Sonuç olarak, kayıt sayfam çok daha iyi ve daha temiz görünmeye başladı.

Aktivasyon sayfası

Varsayılan olarak, WordPress, geleneksel olarak kayıt işlemini iki adımda multisite içinde ayırır - formun yerindeki formu doldurun ve bağlantıya bağlantı gönderildiğinde hesabın etkinleştirilmesi elektronik mektup. Önceki bölümde oluşturulan formu doldurduktan sonra, WordPress, hesabı etkinleştirmek için küçük bir talimat ve referans içeren bir mektup gönderir.

Aktivasyon sayfasının çıktısı için WP-Activate.php dosyası WordPress Kök dizininde bulunur. WP-activate.php ayrıca tamamen değiştirilebilir. İşlem, WP-Signup.php için zaten yaptığımız şeye benzer.

Normal arayüz boyunca example.org/activate / sayfayı oluşturun. Bir adres olarak, sizin için uygun görünen herhangi bir URL kullanın.

WP-activate.php dosyasını MU-Plugins'inize kopyalayın ve MU-Pugins / Selena-Network / Summup / Plugin.php'e bağlayın.

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

İçeride, çok fazla içerik değil, WP-SignUp.php'in aksine. Dosya tek bir işlem gerçekleştirir - doğru anahtar elde edilir ve bir hata mesajı veya başarılı bir işlemi görüntülerse hesabı etkinleştirir.

Gereksiz kontrolleri silin ve gereksinimlerini silin - WordPress 4.1.1'deki 1 ila 69 satır. Sonunda, GET_FOOTER () çağrısını kaldırın. Selena_network_activate_main () işlevine aktarılarak kalan içerikler.

WP_Instaling Constant'ın WordPress'i (WP-load.php) yüklemeden önce burada açıklandığını fark etmek ilginçtir. Varlığı, WordPress'in eklentileri yüklememesine neden olur.

Kayıt sayfası durumunda olduğu gibi, yalnızca gerekli olduğu yerleşimi düzeltmek için kalır. Ayrıca görüntülenen mesajların metnini de değiştirebilirsiniz (bu durumda, MU-Plugins'inizin bir metin etki alanı eklemeyi unutmayın, tüm işlev-çevirmenlere, başka hiçbir yerde yüklenmemiş).

Bitmiş fonksiyon, önceden belirlenmiş bir sayfada, bir bağlı kuruluşta kısa kod veya ayrı bir şablonla kullanılabilir.

Uygun referanslara sahip aktivasyon mektupları

Aktivasyon sayfası çalışmaya hazır, ancak WordPress bunu bilmiyor ve hala WP-Activate.php'e referansla aktivasyon mektupları gönderir. WP-SignUp.php'in aksine, adresi değiştirmesine izin verecek bir filtre yoktur. Bunun yerine, özelliğinizi doğru bağlantılara sahip mektup gönderecek şekilde yazmanız gerekir.

Sayfada bir form doldurma ve gönderme sırasında kayıt WordPress Wpmu_signup_ çağırır kullanıcı.() veya wpmu_signup_ blog.() Kayıt türüne bağlı olarak. Her iki fonksiyon da, WP_signups tablosunda yeni bir giriş oluşturur, aralarında bir hesap etkinleştirme tuşu olan gerekli içeriği doldurur.

Sonra, fonksiyona bağlı olarak, wpmu_signup_ denir kullanıcı._Notification () veya wpmu_signup_ blog._Bildirim (). Her iki fonksiyon da benzer işlevselliğe sahiptir - aktivasyon referansına sahip bir mektup oluşturun ve gönderin, ancak farklı argümanlar alın. Her ikisinde de olayların "müdahalesi" için filtreler vardır.

İf (! Apple_Filters ("wpmu_signup_user_notification", $ user, $ user_email, $ key, $ meta)) False'yı döndürün;

Blog oluşturma ile hesapları etkinleştirmek için:

İf (! Apple_Filters ("wpmu_signup_blog_notification", $ etki alanı, $ yol, $ başlık, $ user, $ user_email, $ anahtarı, $ meta)) (false dönüş;)

Yalnızca WP_Mail () aracılığıyla mektup gönderdiğiniz işleyicilerinizi yazmak için kalır. WordPress'in iki kez bir aktivasyon mektubu göndermemesi için mutlaka yanlış vermek zorunda olması şartıyla Wp-activate.php.

Fonksiyon selena_network_wpmu_signup_user_notification ($ kullanıcı, $ user_email, $ key, $ meta \u003d dizi ()) (// bir başlık oluşturun, metin ve harf başlıkları // ... // bir mektup gönderin veya bir mektup göndermek için bir CRON-görev ekleyin WP_Mail ($ user_email, wp_specialchars_decode ($ konu), $ mesaj, $ mounts_headers); // false'yı kurtarın, böylece WordPress bir aktivasyon mektubu iki kez yanlış göndermez;) Add_Filter ("wpmu_signup_uver_utification", "Selena_Network_wpmu_signup_user_notification", 10, 4) ;

SMTP sunucusundaki harfler gönderirseniz veya kayıt sayısı çok büyükse, anında harf göndermemeyi düşünmelisiniz. Bunun yerine, WordPress Cron kullanarak Cron-Görevlerini ekleyebilirsiniz.

Wp-signup.php ve wp-activate.php'ye erişimi kapatın

Kendi kayıt ve aktivasyon sayfalarını yarattıktan sonra, "orijinalleri" kapatmak gerekebilir. Örneğin, kayıt sayfasında doldurulması gereken ek alanlar varsa. Ayrıca, birçok WordPress bölgesi spam kayıtlarına maruz kalmaktadır.

Bir eylemle ilgili iki sorunu çözün, Apache'den bu sayfaları açmaya çalışırken 404 vermesini isteyebilir. Bunu yapmak için, sadece yapılandırma dosyanızda veya.htaccess'inize bir çift ek yeniden yazma kaydetmeniz gerekir.

RewriteEngine RewriteBase / # Düzenli ifadelerin bilgisi asla gereksiz olmayacak :) Rewriterule ^ wp-signup \\ .php - Rewriterule ^ wp-activupate \\ .php - # WordPress # Kuralları varsayılan olarak WordPress'den başla :) # .. . # Ucu WordPress.

Sonuç

İnternetteki WordPress ile ilişkili bu ve diğer birçok "sorun" için birçok çözüm var. Örneğin, kayıt ve aktivasyon sayfaları oluşturmak için, bazıları orijinal wp-signup.php ve wp-activate.php dosyasını yeniden yazmak için teklif edilir. Bu yapılmamalıdır, çünkü WordPress güncellemesi durumunda, dosyalarda yapılan tüm değişiklikleri kaybedeceksiniz ve kullanamazsınız, kullanan çekirdeğin bütünlüğünü kontrol edemezsiniz.

Herhangi bir ekleme yapılırken, konular veya çözümler Wordpress'in içinde olanlarla ilgilenmek için bir süre harcanmalıdır. Bunun için birçok yararlı hata ayıklama aracı var.

P.S.

Otomatik olarak farklı roller atamak için, yeni kullanıcılar multisite kullanıcı yönetimi eklentisini kullanabilirler.

Makaleyi okuduktan sonra kayıt ve aktivasyon sayfalarının oluşturulması sırasında herhangi bir sorunuz veya zorluğunuz varsa, bir yorum bırakın ve cevap vereceğiz.

27.03.2015 27.03.2015

WordPress Geliştirici. Her şeyde siparişi sever ve yeni araçlarla uğraşıyor. Symfony bileşenlerinin mimarisinden ilham alan.

  • Standart WP-Signup.php yerine çoklisit için kendi kayıt sayfanızı oluşturun.

    Sıradan kurulum WordPress Kayıt sayfası (yetkilendirme, şifre sıfırlama) WP-login.php dosyasını görüntüler.

    • /wp-login.php - Yetkilendirme
    • /wp-login.php?action\u003dRegister - Kayıt
    • /wp-login.php?action\u003dLostPassword - Şifre sıfırlama

    WP-login.php'de multisite için ayrı koşullar vardır. Öyleyse, Multisaite'da /wp-login.php?action\u003dregister'a tıkladığınızda, WordPress, /wp-signup.php sayfasına yönlendirir. Birçok konuda, sayfa çok çekici görünmüyor, bu yüzden kendimizi yapacağız.

    Ana Web Sitesi Ağı

    Varsayılan olarak, WordPress, ana etki alanı (web sitesi) ağındaki kayıt sayfasını (WP-Signup.php) açar. Ancak, farklı konulara sahip olsalar bile, her bir ağ sitesi için ayrı bir kayıt sayfası yapabilirsiniz. Tüm ağ sitelerinin kendi kayıt sayfasına sahip olduğunda durumunu düşüneceğiz, ancak aynı konu kullanılır ve siteler sadece dilde farklılık gösterir. Farklı konular kullanılıyorsa, daha fazla kod yazmanız gerekir.

    fonksiyonlar.php?

    Değil. Bu dosyanın adı WordPress hakkında herhangi bir makalede belirtilmiştir. Bizim olgumuzda, kayıt işlevselliğinin birkaç bölge için tasarlandığı gerçeğini göz önünde bulundurarak, herhangi bir siteyi açarken yüklenen MU-PACIS'lara almak mantıklıdır.

    Lirik digresion

    MU-pluginlerin normal eklentilerden daha erken yüklendiğini ve WordPress çekirdeği tamamen indirilinceye kadar yüklendiğine dikkat etmek önemlidir, bu nedenle bazı fonksiyonlar çağrısı PHP'de fatabal hatalara yol açabilir. Benzer "erken" indirin avantajları vardır. Herhangi bir temanın içinde, fonksiyonlar.php dosyasını konudan indirmeden önce tetiklenen bazı eylemlere yapışamayalım. Bunun bir örneği, jetpack_module_loaded_related-posts eklentisi (ilgili mesajlar - modülün adı), jetpack'deki modüllerin aktivitesini izlemek mümkün olduğu. Konu dosyasından bu eyleme "debriyaj" imkansızdır, çünkü işlem konuyu yüklemeden önce zaten çalışmıştır - eklentiler daha önce yüklenir. Koddaki eylem referans sayfasındaki WordPress önyükleme sırasının ortak resmine bir göz atabilirsiniz.

    Dosyalarda sipariş

    MU-Plugins, size mantıklı görünen herhangi bir sayıda dosya ve herhangi bir grafik içerebilir. Böyle bir hiyerarşiye uyuyorum:

    | -Mu-Plugins | - | load.php | - | - | Selena-Network | - | - | - | - -Signup | - | - | - | - -Yaşa | - | - | - | - | --plugin.php | - | - | - | - |-|... | - | - | - | -jetpack | - | - | - | - | - -plugin.php

    Load.php dosyasında, gerekli tüm "eklentiler" ağımıza bağlıdır:

    Tüm eklentiler için load_muplugin_textDomain ("Selena_network", "/ Selena-Network / Diller /") için traslatatlar yükleyin; // ağ kaydızı WPMU_PLUGIN_DIR gerektirir. "/Selena-Network/signup/plugin.php"; // başka bir eklenti // wpmu_plugin_dir gerektirir ...

    Selena-Network klasörünün içinde, eklenti klasörleri depolanır, her birinin LOAD.PHP'ye bağlandığımız kendi eklentisi.php vardır. Esneklik ve hızlı bir şekilde devre dışı bırakma ve bazı şeyleri içerme yeteneği verir.

    Kayıt sayfasının adresi

    Kayıt sayfasının adresini belirlemek için, WP_SignUp_Location filtresini kullanın. WP-login.php dosyasının içinde bulunabilir ve WP-Signup.php'deki yönlendirmeden sorumlu olan kişidir.

    Durum "Kayıt": if (IS_Multisite ()) (wp_redirect (Apple_Filect ("wp_signup_location", network_site_url ("wp-signup.php")); çıkış;

    Özelliğinizi Mu-Plugins / Selena-Network / SummUp / Plugin.php dosyasında, mevcut sitedeki kayıt sayfasının adresini verecektir:

    İşlev Selena_Network_SignUp_Page ($ URL) (iade home_url ()). "/ Kaydolma /";) add_filter ("WP_SignUp_Location", "Selena_Network_Signup_Page", 99);

    selena_Network - Sitemdeki tüm fonksiyonların adlarında kullandığım, çakışmaları önlemek için kendi benzersiz öneki ile değiştirilmelidir. Filtrenin (99) eklenmesinin önceliği, çünkü BBRESS ve Buddypress gibi bazı eklentiler bu adresin kendi cihazınıza yazabileceği (MU-Plugins, geleneksel eklentilerden daha önce yüklenir). Ziyaretçiyi aynı etki alanında bırakmak için Network_Site_URL () yerine Home_URL () kullanıldığını lütfen unutmayın. Herhangi bir URL'yi adres olarak kullanabilirsiniz.

    Sayfa Oluşturma

    Şimdi Site.com/signup/ ile bir sayfa oluşturalım, normal bir arayüz ile ve yeni sayfamız için Kızı-Konu klasörü şablonunda - Sayfa-Signup.php. "Kayıt" kelimesi yerine, benzersiz bir kimlik kullanabilirsiniz.

    Yeni şablonun içinde, kayıt formunu gösterecek olan Selena_Network_signup_main () işlevini aramanız gerekir.

    Şablonları olan tüm işlemin gerekli olmadığını ve bunun yerine Selena_Network_signup_main () işlevini de arayacak kendi kısa kodunuzu oluşturabileceğiniz anlamına gelmez.

    wp-signup.php ve wp-activate.php

    Şimdi kayıt formunu gösterecek bir işlev oluşturacağız. Bunu yapmak için, WP-Signup.php ve WP-Activate.php dosyalarını, MU-Plugings / Selena-Network / SignUp / (ve bunları MU-Plugins / Selena-Network / 'in içinde bağlamayı unutmayın. Kayıt / eklentisi.php). Dosyalarla daha fazla manipülasyonlar, tanımlamak son derece zor ve uzun süredir onları kendin yapmaya gel. Yalnızca tam olarak ne yapılması gerektiğini ve projenizin kaynak dosyalarını yayınlamayı açıklayacağım:

    1. Dosyanın başında, tüm gerektirir, arama işlevlerini ve diğer kodların dışındaki işlevleri silin.
    2. Adları benzersiz önekler ekleyerek tüm fonksiyonları yeniden adlandırın.
    3. WP-SignUp.php kodunun alt kısmı Selena_Network_signup_main işlevine sarılır ve Global $ Active_signup yazmaya başlamak için başında; .
    4. Düzeni doğru yerlerde kendi başınıza değiştirin.

    Wp-activate.php içinde aynı şeyi yapmanız gerekir:

    1. Tüm kodu silme İşlevler, düzeni ayrı bir fonksiyona sarın.
    2. Düzeni gerekli olduğu yerlerde değiştirin.

    WP-Activate.php dosyası Hesap Aktivasyon sayfasından sorumludur. Kayıt sayfasında olduğu gibi, WP-Activate.php dosyasından bir işlevi çağırmak için ayrı bir şablon oluşturmanız gerekir.

    Aktivasyon mektuplarını göndeririz

    Kayıt sayfası, hesabın etkinleştirilmesine referansla ziyaretçiye bir mektup gönderir. Varsayılan olarak, bu MS-Functions.php dosyasındaki WPMU_Signup_User_Notification () işlevidir. İşlevi işlevi için ödünç alınabilir. Bu işlevi kullanmayı reddetmek istediğinizin nedeni - WP-Activate.php ile hesap etkinleştirme referansı gönderir. Bunun üzerine yanlış hareket ettirerek wpmu_signup_user_notification filtresini kullanarak bu özelliği devre dışı bırakabilirsiniz (eğer bu yapmazsa, aktivasyon mektubu iki kez gönderilir, aslında iki farklı harf).

    Fonksiyonu agnofselenagomez_wpmu_signup_user_notification ($ user, $ user_mail, $ key, $ meta \u003d dizi ()) (// ... // wpmu_signup_user_notification () fonksiyonu wp_mail ($ user_email, wp_specialchars_decode ($ konu), $ Message, $ Message_Headers ), False döndürün;) add_filter ("wpmu_signup_user_notification", "armyofselegenagomez_wpmu_signup_user_notification", 10, 4);

    Sonuç olarak, Selena konusundaki kayıt sayfası çok daha temiz ve dikkatli görünmeye başladı.

    Sonuç

    İnternet, aynı şeyi yapmanın pek çok doğru yolu yoktur - Apache yönlendirmeleri, Java betiği olmadan çalışmayacak Ajax formları vb. Gerçekten çok hoşlanmadım, bu yüzden onu en doğru şekilde yapmaya çalıştım. kendi web sitem.

    Düzenleme dosyalarının, WP-Signup.php ve wp-activate.php dosyalarını değiştirmesi durumunda, WPSPOST, WP-Signup.php ve wp-activate.php dosyalarını değiştirirse, kaynaklardan kaynaklanandan ranknesh'e uzaklaşamayacağını unutmayın, bunlar değişiklikleri bulmak için daha kolaydı. .

    Kodun içinde ne ve nasıl olduğunu tam olarak başa çıkmak için yukarıda açıklanan tüm fonksiyonların kaynak koduna bakmayı unutmayın.

    Bonus. Spamcılara karşı koruma

    WordPress'deki en genç yerler bile genellikle spam kayıtlarına tabidir. Botları filtrelemek için sonsuz koşullar yazabilirsiniz, çoğu zaman yapay bir zeka oluşturma girişimine daha çok benzerler 🙂 Çoklisit durumunda, Apache'de düzenli bir yönlendirme bana yardımcı oldu, bununla birlikte, /wp-signup.php ve / wp- Acitvate.php, 404 sayısını sordum (bir uzman değilim) apache'yi ayarlabu yüzden kurallarım çok doğru olmayabilir).

    RewriteEngine RewriteBase / Rewriterule ^ WP-SignUp \\ .Php - Rewriterule ^ wp-activate \\ .php - # WordPress # WordPress # Kuralları WordPress'ten Varsayılanlara Göre Dokunmuyor :) # ... # End WordPress

    P. S. Bazı üçüncü taraf şeyleri mümkün olduğunca ayrıntılı olarak tanımlamaya çalışıyorum, çünkü başladığımda, bazen birçok şeyi söylemek ve açıklamak bir nedendi. Ayrıca, diğer malzemelerdeki benzer küçük ipuçlarının, yeni bir şeyin çalışmasına ve bilgi alanlarını genişleten bir şeye itileceğine inanıyorum. Düzenli ifadeler RERiterule kayıtlarında kullanılır, tamamen karmaşık değildir, örneğin, ^ sembolü, satırın başlangıcı anlamına gelir.

    Segal, Ekim sonunda internette gök gürültüyle olan popüler CMS Joomla'daki eleştirel 1gün güvenlik açığının sömürülmesini düşüneceğiz. Sayılarla ilgili güvenlik açıkları hakkında olacak CVE-2016-8869, CVE-2016-8870. ve CVE-2016-9081. Her üç de, bir zamanlar çerçevenin derinliklerinde, kendi saatlerini bekleyen bir koddan oluşur, daha sonra ücretsiz kırmak ve bu Joomla'nın herhangi bir masum kullanıcılarındaki kaos, hacklenmiş siteler ve gözyaşları ile birlikte. Gözleri monitörler ışığından kırmızı olan ve klavyeler ekmek kırıntılarıyla dolu olan en cesur ve cesur geliştiriciler, şişmişsel sıkıntılara meydan okuyabildiler ve kafasını düzeltmelerin sunağına uygulayabildiler.

    Uyarı

    Tüm bilgiler yalnızca bilgilendirme amaçlıdır. Ne editörler ne de yazar, bu maddenin malzemelerinin neden olduğu herhangi bir zarardan sorumludur.

    Neden hepsi başladı

    6 Ekim 2016 tarihinde, Damis Palma (Demis Palma), istif alışverişinde bulunan bir konu oluşturdu: Neden, Nitekim, Joomla sürüm 3.6'da, kullanıcıları aynı isim kaydına () kaydetmek için iki yöntem var mı? Birincisi, kullanıcılarontrolerregistration denetleyicisinde bulunur ve ikincisi, kullanıcılara bağlıdır. Damis, KullanıcılarAndrollerSeruser :: Register () yönteminin bir yerde kullanılmadığını mı bilmek istedi mi, yoksa eski mantıktan kalan sadece evrimsel bir anakronizmdir. Bu yöntemin herhangi bir sunumda kullanılmadığında bile, oluşturulmuş bir istek kullanılarak çağrılabilir. Geliştiricinin iToctopus'un takma adı altında cevabıydı, onaylayan: Sorun gerçekten var. Ve Joomla geliştiricilere bir rapor gönderdi.

    Daha sonra, olaylar en hızlı şekilde geliştirdi. 18 Ekim'de Joomla geliştiricileri, o zamanın pounced pounced'in kullanıcısını kaydetmenizi sağlayan Damis raporunu kabul eder. Sitesinde bir not yayınladı, genel olarak, bu konuda sorun ve düşünceler hakkında söyledi. Aynı gün çıkıyor yeni bir versiyon Joomla 3.6.3, hala savunmasız bir kod içeren.

    Bundan sonra, David Tampellini (Davide Tampellini), böcekleri kayıt durumuna geçirir, basit bir kullanıcı değil, yönetici. Ve 21 Ekim'de Joomla güvenlik ekibi yeni bir dava geldi. Zaten ayrıcalıkları yükseltmekten bahsediyor. Aynı gün, Duyuru, Joomla web sitesinde 25 Ekim Salı günü, 3.6.3 salı olan bir başka versiyonun, sistem çekirdeğindeki kritik kırılganlığı düzeltir.

    25 Ekim'de Joomla Security Strike ekibi, Damis tarafından keşfedilen bir kodun bulunduğu son sorunu bulur. Ardından, Resmi Joomla Deposu'nun ana dalında, 21 Ekim'in taahhüdü, göze çarpmayan bir isim olan, kötü niyetli hatayı düzelten 3.6.4 istikrarlı bir sürüm hazırlayın.

    Bundan sonra, çok sayıda ilgilenen birey, geliştiricilerin geliştiricilerin iletimine şanzımanına bağlıdır - güvenlik açığının teşvik edilmesine ve sağlam pişirmeye başlarlar.

    27 Ekim'de Harry Roberts Araştırmacısı, XIPHOS Araştırma Deposu'nda hazır bir şekilde yararlanarak, bir PHP dosyasını savunmasız bir CMS içeren bir sunucuya yükleyebilecek.

    Detaylar

    Peki, tarih öncesi bitti, en ilginç şeye gidin - güvenlik açığının ayırt edilmesi. Bir test versiyonu olarak, Joomla 3.6.3'ü kurdum, böylece tüm sıra numaraları bu sürüm için alakalı olacaktır. Ve bir sonraki göreceğiniz dosyaların tüm yolları, yüklü olan CMS'nin kökünden göreceli olarak belirtilecektir.

    Bul Damis Palm bulduğunuz sayesinde, sistemde kullanıcı kaydı gerçekleştiren iki yöntem olduğunu biliyoruz. İlk olarak CMS tarafından kullanılır ve /components/com_users/controllers/comers/controllers/Registration.php:108'dadır. İkincisi (arayacağımız ve arayacağımız), / bileşenler / COM_USERS / CONTROLLERS / user.php: 293'te yaşıyor. Daha yakın bakalım.

    286: / ** 287: * Bir kullanıcıyı kaydetme yöntemi. 288: * 289: * @return Boolean 290: * 291: * @Since 1.6 292: * / 293: Genel fonksiyon kaydı () 294: (295: JSESSION :: CheckToken ("Post") veya Jexit (JText :: _ ("Jinvalid_Token")); ... 300: // Form verilerini alın. 301: $ veri \u003d $ BU-\u003e Giriş-\u003e Post-\u003e GET ("Kullanıcı", dizi (), "dizi"); .. 315: $ iadesi \u003d $ Model-\u003e Doğrula ($ Form, $ Veri); 316: 317: // Hataları kontrol edin. 318: if ($ dönüş \u003d\u003d\u003d false) 319: (... 345: / Kayıt işlemini tamamlayın. 346: $ iade \u003d $ Model-\u003e Kayıt ($ veri);

    Burada sadece ilginç çizgiler bıraktım. Hassas metodun tam sürümü Joomla deposunda görüntülenebilir.

    Düzenli kullanıcı kaydı sırasında ne olacağını çözeceğiz: Hangi veriler gönderilir ve nasıl işlenir? Kullanıcı kaydı ayarlarında etkinse, form http: //joomla.local/index.php/component/users/? Görünüm \u003d Kayıt adresinde bulunabilir.


    Kullanıcı kaydı için meşru bir istek, aşağıdaki ekran görüntüsüne benziyor.


    COM_USERS bileşenleri, kullanıcılarla çalışmaktan sorumludur. Sorgudaki görev parametresine dikkat edin. $ Denetleyicisi var. $ Yöntemi. Dosya yapısına bakalım.

    Klasördeki Komut Dosyası Adları kontrolörler. Denilen denetleyicilerin adlarına uygundur. İsteğimizden beri $ controller \u003d "Kayıt", dosya arayacaktır. kayıt.php. ve onun kayıt () yöntemi.

    DİKKAT, SORU: Kayıt işleminin koddaki savunmasız bir alanda nasıl iletilir? Muhtemelen zaten tahmin ettin. Hassas ve mevcut yöntemlerin isimleri (kayıt), bu nedenle denetleyicinin adını değiştirebiliriz. Ve savunmasız denetleyici nerede? Dosyada hemen user.php.. $ Controller \u003d "Kullanıcı" dır. Hepinizi topluyoruz ve görev alıyoruz \u003d user.register. Şimdi kayıt talebi ihtiyacımız olan yöntemle işleniyor.


    Yapmamız gereken ikinci şey, doğru formatta veri göndermektir. Her şey burada basit. Meşru Kayıt () bizden bir diziyi bekliyor, burada kayıt alacağımız JOY, ad, giriş, şifre, posta (bir sorgu ile ekran görüntüsüne bakın).

    • /components/com_users/controllers/registration.php: 124: // Kullanıcı verilerini alın. 125: $ RequestData \u003d $ BU-\u003e Giriş-\u003e POST-\u003e GET ("JForm", dizi (), "dizi");

    Koğuşumuz bu verileri adlandırılmış diziden alır.

    • /components/com_users/controllers/user.php: 301: // Form verilerini alın. 302: $ veri \u003d $ this-\u003e Giriş-\u003e Post-\u003e GET ("Kullanıcı", dizi (), "dizi");

    Bu nedenle, tüm parametrelerin adlarını kullanıcıya JFROM ile değiştiriyoruz.

    Üçüncü adımımız bir CSRF'nin geçerli bir belirteci bulmaktır, çünkü onsuz kayıt olmayacak.

    • /Components/com_users/controllers/user.php: 296: JSESSION :: CheckToken ("Post") veya Jexit (Jinvalid_Token));

    Hash MD5'e benziyor ve örneğin, /index.php/component/users/?view\u003dlogin sitesindeki yetkilendirme formundan alabilirsiniz.


    Artık istediğiniz yöntemle kullanıcılar oluşturabilirsiniz. Her şey oldusa, tebrik ediyorum - sadece güvenlik açığını anladın CVE-2016-8870. "Yeni kullanıcıların kaydolması için izinlerin eksik doğrulanması."

    İşte userControllerRegistration denetleyicisinden "Çalışan" yönteminde nasıl görünüyor?

    • /components/com_users/controllers/registration.php: 113: // Kayıt devre dışı bırakılırsa - Giriş sayfasına yönlendirin. 114: Eğer (Jcomponenthelper :: getParams ("COM_USERS") -\u003e GET ("AllowSerrgilrationration") \u003d\u003d 0) 115: (116: $ BU-\u003e SETREDIRECT (Jroute :: _ ("index.php? Option \u003d com_users & Görünüm \u003d giriş ", false)); 117: 118: Yanlış döndür; 119 :)

    Ve yani savunmasız:

    • /Components/com_users/controllers/user.php:

    Evet, hiçbir şekilde.

    İkinci, çok daha ciddi bir problemi anlamak için, bizim tarafımızdan oluşturulan bir istek göndereceğiz ve kodun farklı bölümlerinde nasıl yapıldığını takip edeceğiz. İşte kullanıcının çalışma yönteminde gönderilen verileri kontrol etmekten sorumlu bir parça:

    Devam sadece katılımcılara mevcut

    Seçenek 1. Sitedeki tüm malzemeleri okumak için Site topluluğuna katılın

    Belirtilen süre boyunca topluluğa üyelik sizi hacker'ın tüm malzemelerine erişimini açacak, kişisel birikimsel indiriminizi artıracak ve profesyonel bir XAKEP puanı derecelendirmesi birikecektir!

    Konular genellikle işlevsel değildir, ancak bazen biz, geliştiriciler, konularımızda biraz daha iyi ve daha uygun hale getirmek için bazı olanaklar sunmanız gerekir.

    Bu rehberde, "eklentilerin toprakları" terimini göz önünde bulunduracağız, Thomas Griffin: TGM eklentisi etkinleştirme kütüphanesi tarafından yazılmış fantastik bir araç kullanmayı öğreneceğiz.

    Konunun işlevselliği: Eklentilerin topraklarına istila

    Temalar, WordPress web sitesinin tasarımını değiştirmek için tasarlanmıştır. İdeal olarak, konu sadece görsel yönü etkilemelidir. Bununla birlikte, "Altın Çağ" sözcüğümüzde, eklentiler geliştiricileri genellikle pazarda rekabet edebilirliği sürdürmenize izin veren konularında fonksiyonel özellikler içerir.

    Bu, eklentilerin topraklarının istilasıdır. Kodun bazı fonksiyonel bölümleri olarak "eklentilerin topraklarını" sunabiliriz. Herhangi bir kod snippet, sitenizin işlevselliğini değiştirme, belirtilen kod Wordpress çekirdeğine yerleştirilmezse eklenti olarak gösterilmelidir.

    Makalelerimden birinde daha önce önceden formüle ettim "bölge eklentileri:

    Tuhaflık, sitenin görsel gösterimi ile ilgili ise, bu durumda konuya dahil edilmelidir; İşlevsellik ile ilişkiliyse, ayrı bir eklenti olarak gösterilmelidir.

    Oldukça basit bir kural. İnsanlar hala kod düzeyinde kayıtlı fragmanlar seviyesine kayıt yapmaya çalışıyorlar, ancak temaların katalogları (WordPress.org veya ThemeForest gibi), eklentilerin topraklarını istila eden temaları almazlar. Böylece, temalardaki işlevsellik teklifi belli bir sorun haline gelmiştir.

    Neyse ki, "eklentilerin toprakları" yönetimine karşı çıkmayan basit bir çözüm var.

    TGM Eklentisi Etkinleştirme Kütüphanesine Giriş

    TGM eklentisi aktivasyonunu ayarlama

    Kodun sonunda iki parametre ile TGMPA () işlevine dikkat edin. İkinci parametre, $ eklentiler gibi bir dizi olan $ CONFIG değişkenidir. Adından aşağıdaki gibi, TGM eklentisi etkinleştirme kütüphanesini kullanarak yapılandırabilirsiniz. bu masif. Değişken kendi seçenek kümesini kabul eder:

    • kimlik (string) Konunuzdaki TGM eklentisi etkinleştirme kütüphanesi için benzersiz bir kimlik. Bu çok önemlidir: Diğer eklentiler de TGM eklentisi aktivasyonunu kullanırsa, farklı kimlikler olası çatışmaları önler.
    • default_Path (string) - Konunuzdaki eklentiler için varsayılan bir mutlak yol. Yüklediğinizde, zip dosyasının adını eklentiniz için kaynak parametre değeri olarak kullanabilirsiniz.
    • eklentiler için Menü (String) - Menü Menüsü.
    • has_notices (Boolean) - Doğru olarak belirtilirse, gerekli / önerilen eklentiler için idari bildirimler verilecektir.
    • alınabilir (Boolean) - Doğru olarak belirtilirse, kullanıcı bildirimleri "kapatabilir".
    • reddiss_msg (string) - Bahsedilebilir seçenek yanlış olarak ayarlanırsa, bu mesaj yönetici bildiriminin üzerinde gösterilecektir.
    • İs_otomatik (Boolean) - Doğru olarak belirtilirse, kullanıcı bunları yüklemeyi kabul ettikten sonra eklentiler etkinleştirilecektir.
    • mesaj (string) - eklenti tablosunun önünde görüntülenen ek HTML.
    • dizeler (dizi) - görüntülenen mesajları içeren bir dizi. Onları yayın çizgileri olarak ayarlayabilirsiniz. Tüm mesajların tam listesini görmek için example.php dosyasına bakın.
    "Mytheme-tgmpa", // benzersiz tgmpa kimliğiniz "default_path" \u003d\u003e get_stylesheet_Directory (). "/ lib / eklentiler /", // varsayılan mutlak yol "Menü" \u003d\u003e "MyTement-Instally-Gerekenler-Plugins", // Menü Slug "HAS_NOTICES" \u003d\u003e True, // admin bildirimleri "İşten Çıkarılabilir" \u003d\u003e Yanlış , // farklılıklar reddedilemez "dismiss_msg" \u003d\u003e "Gerçekten, bu eklentileri yüklemenize gerçekten ihtiyacım var, tamam mı?", // bu mesaj NAG "IS_OTOMATOMATION" \u003d\u003e True, // otomatik olarak çıktı olacaktır. "Mesaj" \u003d\u003e "kurulumundan sonra eklentileri etkinleştirin", // eklentiler tablosu" strings "\u003d\u003e dizi (); // tgm eklentisi aktivasyonunun kullandığı mesaj dizeleri dizisi dizisi;?\u003e

    Sonuç

    Gördüğünüz gibi, işlevselliği önerin temalar wordpress. Belki - sadece bir konudan diğerine geçebilecek olan kullanıcılar hakkında her şeyden önce düşünmeniz gerekir. TGM Eklentisi Etkinleştirme Kütüphanesi bunun için gerçekten akıllı bir yol sunar.

    Bu araç hakkında ne düşünüyorsun? Hiç kullandın mı, gelecekte kullanmayı planlıyor musun? Düşüncelerini paylaş!