Cara Membuat Halaman Pendaftaran Anda Sendiri dalam WordPress Multisite. Kami mengalihkan data statik ke pelayan yang berasingan dan menyambungkan CDN

Membolehkan anda menggunakan satu pemasangan WordPress untuk berbilang tapak pada masa yang sama. Dalam kes ini, setiap tapak mendapat jadualnya sendiri dalam pangkalan data dengan awalan yang unik.

Jadual dengan data pengguna berdaftar adalah perkara biasa kepada semua tapak di rangkaian. Ini adalah tambahan yang pasti dan dengan mendaftar sebaik sahaja anda boleh mendapatkan akses ke beberapa tapak. Selain itu, pada setiap tapak akaun yang sama boleh mempunyai hak yang berbeza. Sebagai contoh, pada satu tapak pengguna mungkin menjadi editor, dan pada satu lagi pentadbir.

Dalam pemasangan WordPress biasa, halaman pendaftaran, log masuk dan tetapan semula kata laluan dikeluarkan oleh fail wp-login.php.

  • wp-login.php - kebenaran
  • wp-login.php?action=register - pendaftaran
  • wp-login.php?action=lostpassword - tetapan semula kata laluan

Dalam mod Multisite, teras WordPress mula berkelakuan sedikit berbeza dan apabila anda mengikuti pautan wp-login.php?action=register, ubah hala ke wp-signup.php akan berlaku. Ini ialah halaman pendaftaran rangkaian anda yang disertakan dengan WordPress secara lalai.

Selain mendaftarkan akaun pengguna biasa, anda juga boleh membuat tapak web baharu padanya jika pentadbir super telah mendayakan ciri ini dalam tetapan rangkaian (Pentadbir Rangkaian → Tetapan → Tetapan Rangkaian).

Dalam kebanyakan tema, halaman pendaftaran tidak kelihatan sangat bagus. Banyak tema menggunakan rangka kerja CSS seperti Bootstrap dan kelas tersuai mereka sendiri untuk menggayakan elemen berbeza pada halaman, jadi sukar untuk menulis satu HTML yang sesuai dengan semua orang.

Tetapi jangan putus asa jika halaman kelihatan tidak kemas. Fail wp-signup.php adalah perkara yang bagus pada mulanya, apabila anda tidak mempunyai masa untuk menyelesaikan setiap butiran tapak - anda boleh memfokus pada halaman dan kandungan lain yang lebih penting.

Apabila anda sudah bersedia untuk membuat halaman pendaftaran anda sendiri, wp-signup.php ialah contoh yang baik untuk membantu anda memahami julat ciri yang disediakan oleh WordPress untuk memproses dan mengesahkan input pengguna dan mencipta akaun baharu.

Tapak utama rangkaian

Secara lalai, WordPress membuka halaman pendaftaran (wp-signup.php) pada domain utama (tapak) rangkaian. Walau bagaimanapun, anda boleh membuat halaman pendaftaran untuk setiap tapak dalam rangkaian anda, walaupun ia mempunyai tema.

Kami akan mempertimbangkan kes apabila semua tapak dalam rangkaian menggunakan tema yang sama, tetapi setiap daripada mereka mempunyai halaman pendaftaran. Laman web berbeza dalam bahasa (Bahasa Inggeris dan Rusia), jadi halaman pendaftaran akan dipaparkan dalam bahasa "ibu" tapak tersebut. Jika tapak menggunakan tema yang berbeza, segala-galanya akan bergantung pada tema apakah mereka, sama ada susun atur yang sama sesuai dengannya (situasi yang sangat baik yang boleh mendorong anda untuk menyatukan semua tema anda) atau sama ada ia berbaloi untuk membangunkan halaman secara individu.

Alternatif kepada functions.php

Pesanan fail

Pemalam MU boleh mengandungi sebarang bilangan fail dan struktur yang kelihatan logik kepada anda. Saya berpegang pada sesuatu seperti hierarki ini:

| mu-plugin | | load.php | | selena-network | | | pendaftaran | | | | plugin.php | | | ... | | | jetpack | | | | plugin.php

Fail load.php termasuk terjemahan dan semua "plugin" yang diperlukan:

// Memuatkan terjemahan untuk pemalam MU load_muplugin_textdomain("selena_network", "/selena-network/languages/"); // Fungsi untuk halaman pendaftaran memerlukan WPMU_PLUGIN_DIR . "/selena-network/signup/plugin.php"; // Satu lagi pemalam // memerlukan WPMU_PLUGIN_DIR ...

Folder pemalam disimpan di dalam direktori rangkaian selena. Setiap satu mempunyai plugin.php sendiri, yang kami sertakan dalam load.php. Ini memberi anda fleksibiliti dan keupayaan untuk mematikan dan menghidupkan komponen individu dengan serta-merta pada projek kerja sekiranya berlaku kecemasan.

Halaman pendaftaran

Setelah mengetahui di mana dan bagaimana kami akan menulis kod, kami boleh meneruskan untuk membuat halaman pendaftaran.

Mari buat halaman dengan alamat example.org/signup/ melalui antara muka biasa. Anda boleh menggunakan mana-mana URL yang kelihatan sesuai untuk projek anda.

Ubah hala ke halaman pendaftaran yang dikehendaki

Untuk membolehkan WordPress mengetahui tentang halaman pendaftaran baharu kami dan mengubah hala tepat kepadanya, apabila anda mengklik pada pautan “Daftar”, penapis wp_signup_location digunakan. Ia boleh didapati di dalam wp-login.php dan bertanggungjawab untuk mengubah hala ke wp-signup.php secara lalai.

Kes "daftar" : if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); keluar; // ...

Seperti yang anda ingat, secara lalai, halaman pendaftaran dibuka pada domain utama rangkaian. Inilah sebabnya network_site_url() digunakan di sini.

Mari tambahkan pengendali kami pada penapis dalam mu-plugins/selena-network/signup/plugin.php, yang akan mengembalikan alamat halaman pendaftaran pada tapak semasa:

Fungsi selena_network_signup_page($url) ( return home_url("signup"); ) add_filter("wp_signup_location", "selena_network_signup_page", 99);

selena_network ialah awalan yang saya gunakan dalam nama semua fungsi dalam pemalam MU di tapak saya untuk mengelakkan perlanggaran, ia harus diganti dengan awalan unik anda sendiri. Keutamaan menambah penapis ialah 99, kerana sesetengah pemalam, contohnya, bbPress dan BuddyPress boleh menimpa alamat ini dengan mereka sendiri (pemalam MU dimuatkan lebih awal daripada pemalam biasa, lihat di atas).

Sila ambil perhatian bahawa home_url() digunakan, yang, tidak seperti network_site_url(), mengembalikan alamat tapak semasa dan bukan tapak utama rangkaian.

Kefungsian wp-signup.php

Fail wp-signup.php mengandungi sejumlah besar fungsi dan kod. Untuk melihat gambaran besar, anda boleh menggunakan lipatan kod. Sebagai peraturan, dalam bahasa Inggeris ini dipanggil "lipat kod".

Pada permulaan fail, dari baris 1 hingga 80 (dalam versi 4.1.1), pelbagai semakan dilakukan dan "permulaan" halaman dikeluarkan menggunakan get_header() .

Seterusnya, banyak kaedah diisytiharkan, dan sebelum kita mula bekerja dengannya, ia patut memahami fungsi setiap fungsi. Ramai daripada mereka sering menggunakan fungsi lain dengan awalan wpmu_, semuanya diisytiharkan dalam fail wp-includes/ms-functions.php. Bahagian ini sukar difahami tanpa melihat kod itu sendiri. Di bawah adalah penerangan ringkas tentang fungsi utama sekiranya anda menghadapi sebarang kesulitan.

  • wpmu_signup_stylesheet() - Mengeluarkan CSS tambahan pada halaman pendaftaran.
  • show_blog_form() - medan untuk pendaftaran tapak (alamat, nama, keterlihatan untuk enjin carian).
  • validate_blog_form() - mengesahkan alamat tapak dan tajuk yang dimasukkan menggunakan wpmu_validate_blog_signup() .
  • show_user_form() - medan untuk pendaftaran pengguna (log masuk dan alamat e-mel).
  • validate_user_form() — menyemak log masuk dan alamat e-mel yang dimasukkan. mel menggunakan wpmu_validate_user_signup() .
  • signup_another_blog() - medan untuk mendaftar tapak baharu menggunakan show_blog_form() untuk pengguna yang sudah berdaftar di tapak.
  • validate_another_blog_signup() - menyemak alamat tapak dan tajuk menggunakan validate_blog_form() .
  • signup_user() ialah fungsi utama untuk memaparkan medan halaman pendaftaran.
  • validate_user_signup() - menyemak log masuk dan alamat e-mel. mel menggunakan validate_user_form() .
  • signup_blog() - medan untuk memasukkan alamat, nama dan keterlihatan tapak (langkah pendaftaran kedua) menggunakan show_blog_form() .
  • validate_blog_signup() - menyemak log masuk, alamat e-mel. e-mel, alamat dan nama laman web.

Di bahagian paling bawah fail wp-signup.php (dari baris 646 dalam versi 4.1.1) ialah logik utama halaman pendaftaran, yang menggunakan semua kaedah yang diterangkan di atas. Bahagian kod ini tidak termasuk dalam fungsi. Pada akhirnya get_footer() dipanggil.

Salin fungsi wp-signup.php

Berikut akan menerangkan prosedur untuk menyalin wp-signup.php ke dalam pemalam MU dan membuat perubahan pada "fork". Ini mungkin bukan cara terbaik untuk pergi. Sebaliknya, anda boleh menulis fungsi anda sendiri dari awal untuk mengesahkan dan memaparkan borang menggunakan kelas dan bukannya fungsi biasa. Pada pendapat saya, wp-signup.php sudah mempunyai semua logik yang diperlukan untuk halaman kami, yang tinggal hanyalah membuat beberapa perubahan kecil.

Apabila WordPress dikemas kini, wp-signup.php juga berubah dari semasa ke semasa, tetapi ini tidak bermakna anda perlu menyegerakkan "garpu" anda dengan setiap keluaran. Fungsi di dalam wp-signup.php pada asasnya hanya berurusan dengan output HTML, pengesahan data, mencipta akaun dan tapak, dan kaedah dengan awalan wpmu_, yang diisytiharkan dalam ms-functions.php, terlibat.

Mari buat fungsi yang akan memaparkan borang pendaftaran pada halaman. Untuk melakukan ini, salin wp-signup.php dari akar WordPress ke mu-plugings/selena-network/signup/ . Mari sambungkannya di dalam mu-plugins/selena-network/signup/plugin.php).

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

Mari kita keluarkan semua pemeriksaan yang diperlukan dan tidak perlu dari awal fail yang disalin. Dalam versi 4.1.1 ini adalah semua kod dari baris 1 hingga 80.

Kini kami bersedia untuk mencipta fungsi utama untuk memaparkan borang pendaftaran. Untuk melakukan ini, kami akan memindahkan semua logik dari baris 646 ke hujung fail ke dalam fungsi yang dipanggil selena_network_signup_main. Pada penghujungnya, kami akan mengalih keluar dua penutupan tambahan

(baris 722 dan 723), serta panggilan get_footer().

Dalam selena_network_signup_main() yang baru dibuat, pada mulanya kami akan mengisytiharkan pembolehubah active_signup global, yang digunakan oleh semua kaedah lain daripada fail ini. Dan mari tambah panggilan ke acara before_signup_form, yang kami alih keluar dari awal fail.

Fungsi selena_network_signup_main() ( global $active_signup; do_action("before_signup_form"); // ... )

Kini yang tinggal hanyalah menukar susun atur di semua tempat yang perlu dan halaman pendaftaran sudah sedia.

Keluaran borang pendaftaran

Terdapat sekurang-kurangnya dua pilihan di sini. Cara yang lebih mudah ialah membuat kod pendek dan meletakkannya pada halaman melalui editor biasa.

// Create a shortcode network_signup add_shortcode("network_signup", "selena_network_signup_main");

Pilihan kedua ialah mencipta templat halaman page-signup.php dalam folder tema anak anda. Daripada perkataan "pendaftaran", anda boleh menggunakan ID unik yang diberikan pada halaman tersebut. Di dalam templat, tambahkan reka letak yang diperlukan dan panggil selena_network_signup_main() di tempat yang betul.

Hasilnya, halaman pendaftaran saya kelihatan lebih baik dan bersih.

Halaman pengaktifan

Secara lalai, WordPress membahagikan proses pendaftaran ke dalam Multisite kepada dua langkah - mengisi borang di tapak dan mengaktifkan akaun anda dengan mengklik pada pautan yang dihantar dalam e-mel. Selepas anda mengisi borang yang dibuat di bahagian sebelumnya, WordPress menghantar e-mel dengan arahan ringkas dan pautan untuk mengaktifkan akaun anda.

Fail wp-activate.php yang terletak dalam direktori akar WordPress bertanggungjawab untuk memaparkan halaman pengaktifan. wp-activate.php juga boleh diubah sepenuhnya. Proses ini serupa dengan apa yang telah kami lakukan untuk wp-signup.php.

Mari buat halaman example.org/activate/ melalui antara muka biasa. Untuk alamat, gunakan mana-mana URL yang kelihatan sesuai untuk anda.

Mari salin fail wp-activate.php ke pemalam MU kami dan sambungkannya ke mu-plugins/selena-network/signup/plugin.php.

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

Tidak banyak kandungan di dalamnya, tidak seperti wp-signup.php. Fail menjalankan satu operasi - ia mengaktifkan akaun jika kunci yang betul diterima dan memaparkan mesej tentang ralat atau berjaya menyelesaikan operasi.

Mari kita keluarkan semua semakan dan keperluan yang tidak perlu - dari baris 1 hingga 69 dalam WordPress 4.1.1. Pada penghujungnya, kami akan mengalih keluar panggilan get_footer(). Kami akan memindahkan kandungan yang tinggal ke fungsi selena_network_activate_main().

Adalah menarik untuk diperhatikan bahawa di sini, sebelum memuatkan WordPress (wp-load.php), WP_INSTALLING malar telah diisytiharkan. Kehadirannya menyebabkan WordPress tidak memuatkan pemalam.

Seperti dalam kes halaman pendaftaran, yang tinggal hanyalah membetulkan susun atur jika perlu. Anda juga boleh menukar teks mesej yang dipaparkan (dalam kes ini, jangan lupa untuk menambah domain teks pemalam MU anda kepada semua fungsi penterjemah; secara lalai, ia tidak dipasang di mana-mana).

Fungsi siap sedia boleh digunakan pada halaman pra-dicipta melalui kod pendek atau templat berasingan dalam tema kanak-kanak.

Surat pengaktifan dengan pautan yang betul

Halaman pengaktifan sedia untuk digunakan, tetapi WordPress tidak mengetahuinya dan masih akan menghantar e-mel pengaktifan dengan pautan ke wp-activate.php. Tidak seperti wp-signup.php, tiada penapis yang membenarkan anda menukar alamat. Sebaliknya, anda perlu menulis fungsi anda sendiri yang akan menghantar e-mel dengan pautan yang betul.

Apabila anda mengisi dan menyerahkan borang pada halaman pendaftaran, WordPress memanggil wpmu_signup_ pengguna() atau wpmu_signup_ blog() bergantung kepada jenis pendaftaran. Kedua-dua fungsi mencipta entri baharu dalam jadual wp_signups, mengisinya dengan kandungan yang diperlukan, yang termasuk kunci pengaktifan akaun.

Selepas itu, bergantung pada fungsi, wpmu_signup_ dipanggil pengguna _notification() atau wpmu_signup_ blog _pemberitahuan() . Kedua-dua fungsi mempunyai fungsi yang sama - ia menjana dan menghantar e-mel dengan pautan pengaktifan, tetapi mengambil hujah yang berbeza. Kedua-duanya mempunyai penapis untuk "memintas" acara.

Jika (! apply_filters("wpmu_signup_user_notification", $user, $user_email, $key, $meta)) return false;

Untuk mengaktifkan akaun dengan penciptaan blog:

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

Yang tinggal hanyalah menulis pengendali anda sendiri, di dalamnya menghantar surat melalui wp_mail() , dan pada akhirnya, pastikan anda mengembalikan palsu supaya WordPress tidak menghantar surat pengaktifan dua kali - satu adalah milik anda, satu lagi adalah lalai surat dengan pautan ke wp-activate.php .

Fungsi selena_network_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // Jana pengepala, teks dan pengepala surat // ... // Hantar surat atau tambah tugas Cron untuk menghantar letter wp_mail($user_email , wp_specialchars_decode($subject), $message, $message_headers); // Beri palsu supaya WordPress tidak menghantar e-mel pengaktifan dua kali kembali palsu; ) add_filter("wpmu_signup_user_notification", "selena_network_wpmu_signup4",_10_user_network_wpmu_signup",_10 );

Jika anda menghantar e-mel melalui pelayan SMTP atau bilangan pendaftaran adalah sangat besar, anda harus mempertimbangkan untuk tidak menghantar e-mel serta-merta. Sebaliknya, anda boleh menambah tugas Cron menggunakan WordPress Cron.

Kami menutup akses kepada wp-signup.php dan wp-activate.php

Selepas membuat halaman pendaftaran dan pengaktifan anda sendiri, anda mungkin mahu menutup "asal". Sebagai contoh, jika terdapat ruangan tambahan pada halaman pendaftaran yang mesti diisi. Selain itu, banyak tapak WordPress tertakluk kepada pendaftaran spam.

Anda boleh menyelesaikan dua masalah dalam satu tindakan dengan meminta Apache mengembalikan 404 jika anda cuba membuka halaman ini. Untuk melakukan ini, anda hanya perlu menambah beberapa RewriteRules tambahan pada fail konfigurasi anda atau .htaccess .

RewriteEngine On RewriteBase / # Pengetahuan tentang ungkapan biasa tidak akan berlebihan :) RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # BEGIN WordPress # Kami tidak menyentuh peraturan WordPress secara lalai :) # .. # TAMAT WordPress

Kesimpulan

Terdapat banyak penyelesaian untuk ini dan banyak lagi "masalah" WordPress yang lain di Internet. Contohnya, untuk membuat halaman pendaftaran dan pengaktifan, ada yang mencadangkan untuk menulis semula wp-signup.php dan wp-activate.php yang asal. Ini tidak sepatutnya dilakukan, kerana jika anda mengemas kini WordPress, anda akan kehilangan semua perubahan yang dibuat pada fail, dan anda juga tidak akan dapat menyemak integriti teras menggunakan .

Apabila membangunkan sebarang alat tambah, tema atau penyelesaian, anda harus meluangkan sedikit masa untuk memahami perkara yang berlaku di dalam WordPress. Terdapat banyak alat penyahpepijatan yang berguna untuk ini.

P.S.

Untuk memperuntukkan peranan berbeza secara automatik kepada pengguna baharu, anda boleh menggunakan pemalam Pengurusan Pengguna Berbilang Laman.

Jika anda mempunyai sebarang soalan atau kesulitan semasa membuat pendaftaran dan halaman pengaktifan selepas membaca artikel, tinggalkan komen dan kami pasti akan menjawab.

27.03.2015 27.03.2015

Pembangun WordPress. Suka ketertiban dalam segala hal dan memahami alatan baharu. Diinspirasikan oleh seni bina komponen Symfony.

  • Kami mencipta halaman pendaftaran kami sendiri untuk multisite dan bukannya wp-signup.php standard.

    Dalam pemasangan WordPress biasa, halaman pendaftaran (log masuk, tetapan semula kata laluan) dikeluarkan oleh fail wp-login.php.

    • /wp-login.php - kebenaran
    • /wp-login.php?action=register - pendaftaran
    • /wp-login.php?action=lostpassword - tetapan semula kata laluan

    Terdapat syarat berasingan untuk multisite dalam wp-login.php. Jadi, apabila anda mengikuti pautan /wp-login.php?action=register pada multisite, WordPress akan mengubah hala ke halaman /wp-signup.php. Banyak tema tidak menjadikan halaman kelihatan sangat menarik, jadi kami akan membuatnya sendiri.

    Tapak utama rangkaian

    Secara lalai, WordPress membuka halaman pendaftaran (wp-signup.php) pada domain utama (tapak) rangkaian. Walau bagaimanapun, anda boleh membuat halaman pendaftaran berasingan untuk setiap tapak dalam rangkaian anda, walaupun ia mempunyai tema yang berbeza. Kami akan mempertimbangkan kes di mana semua tapak dalam rangkaian mempunyai halaman pendaftaran mereka sendiri, tetapi tema yang sama digunakan dan tapak hanya berbeza dalam bahasa. Jika anda menggunakan tema yang berbeza, anda perlu menulis lebih banyak kod.

    functions.php?

    Tidak. Nama fail ini nampaknya disebut dalam setiap artikel tentang WordPress. Dalam kes kami, memandangkan fungsi pendaftaran direka untuk beberapa tapak, masuk akal untuk memasukkannya dalam pemalam MU, yang dimuatkan apabila mana-mana tapak dibuka.

    Penyimpangan lirik

    Perlu diingat bahawa pemalam MU dimuatkan sebelum pemalam biasa dan sebelum teras WordPress dimuatkan sepenuhnya, jadi memanggil beberapa fungsi boleh membawa kepada ralat maut dalam PHP. Pemuatan "awal" sedemikian juga mempunyai kelebihannya. Katakan di dalam mana-mana tema anda tidak boleh melampirkan pada beberapa tindakan yang dicetuskan walaupun sebelum fail functions.php dimuatkan daripada tema. Contoh ini ialah tindakan daripada pemalam Jetpack dalam bentuk jetpack_module_loaded_related-posts (related-posts ialah nama modul), dengan bantuannya adalah mungkin untuk memantau aktiviti modul dalam Jetpack. Adalah mustahil untuk "melampirkan" pada tindakan ini daripada fail tema, kerana tindakan itu telah dicetuskan sebelum tema dimuatkan - pemalam dimuatkan sebelum tema. Anda boleh melihat gambar umum susunan pemuatan WordPress pada halaman Rujukan Tindakan dalam codex.

    Pesanan fail

    Pemalam MU boleh mengandungi sebarang bilangan fail dan sebarang struktur yang kelihatan logik kepada anda. Saya berpegang pada sesuatu seperti hierarki ini:

    |-mu-plugin |-|-load.php |-|-|-selena-network |-|-|-|-signup |-|-|-|-|-plugin.php |-|-|-| -|-... |-|-|-|-jetpack |-|-|-|-|-plugin.php

    Fail load.php mengandungi semua "plugin" yang diperlukan untuk rangkaian kami:

    // Muatkan Terjemahan untuk semua addon load_muplugin_textdomain ("selena_network", "/selena-network/languages/"); // Pendaftaran Rangkaian memerlukan WPMU_PLUGIN_DIR . "/selena-network/signup/plugin.php"; // Pemalam lain // memerlukan WPMU_PLUGIN_DIR ...

    Di dalam folder rangkaian selena, folder pemalam disimpan, masing-masing dengan plugin.php sendiri, yang kami sertakan dalam load.php. Ini memberi anda fleksibiliti dan keupayaan untuk mematikan dan menghidupkan perkara dengan cepat.

    Alamat halaman pendaftaran

    Untuk menentukan alamat halaman pendaftaran, gunakan penapis wp_signup_location. Ia boleh didapati di dalam fail wp-login.php dan bertanggungjawab untuk ubah hala ke wp-signup.php.

    Kes "daftar" : if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); exit;

    Mari tambahkan fungsi kami pada mu-plugins/selena-network/signup/plugin.php, yang akan mengembalikan alamat halaman pendaftaran pada tapak semasa:

    Fungsi selena_network_signup_page ($url) ( return home_url () . "/signup/"; ) add_filter ( "wp_signup_location", "selena_network_signup_page", 99);

    selena_network ialah awalan yang saya gunakan dalam nama semua fungsi dalam pemalam MU di tapak saya untuk mengelakkan perlanggaran, ia harus diganti dengan awalan unik anda sendiri. Keutamaan untuk menambah penapis ialah 99, kerana sesetengah pemalam, contohnya bbPress dan BuddyPress, boleh menimpa alamat ini dengan mereka sendiri (pemalam MU dimuatkan lebih awal daripada pemalam biasa, lihat di atas). Ambil perhatian bahawa home_url() digunakan dan bukannya network_site_url() untuk memastikan pelawat berada pada domain yang sama. Mana-mana URL boleh digunakan sebagai alamat.

    Mencipta halaman

    Sekarang mari kita buat halaman dengan alamat site.com/signup/ melalui antara muka biasa, dan dalam folder tema kanak-kanak templat untuk halaman baharu kami ialah page-signup.php. Daripada perkataan "pendaftaran", anda boleh menggunakan ID unik.

    Di dalam templat baharu, anda perlu memanggil fungsi selena_network_signup_main(), yang akan memaparkan borang pendaftaran.

    Perlu diingat bahawa keseluruhan proses templat adalah pilihan dan sebaliknya anda boleh membuat kod pendek anda sendiri yang juga akan memanggil fungsi selena_network_signup_main().

    wp-signup.php dan wp-activate.php

    Sekarang mari kita buat fungsi yang akan memaparkan borang pendaftaran. Untuk melakukan ini, salin fail wp-signup.php dan wp-activate.php dari akar WordPress ke mu-plugings/selena-network/signup/ (dan jangan lupa untuk menyambungkannya di dalam mu-plugins/selena-network /signup/plugin.php) . Manipulasi lanjut dengan fail amat sukar dan panjang untuk diterangkan, jadi anda perlu melakukannya sendiri. Saya hanya akan menerangkan perkara yang perlu dilakukan dan menerbitkan fail sumber projek saya:

    1. Pada permulaan fail, alih keluar semua memerlukan , panggilan fungsi dan kod lain di luar fungsi.
    2. Namakan semula semua fungsi dengan menambahkan awalan unik pada nama.
    3. Balut bahagian bawah kod wp-signup.php dalam fungsi selena_network_signup_main dan pada mulanya tulis global $active_signup; .
    4. Gantikan reka letak dengan anda sendiri di tempat yang betul.

    Di dalam wp-activate.php anda perlu melakukan lebih kurang perkara yang sama:

    1. Alih keluar semua kod di luar fungsi, balut susun atur dalam fungsi berasingan.
    2. Tukar susun atur di tempat yang perlu.

    Fail wp-activate.php bertanggungjawab untuk halaman pengaktifan akaun. Seperti halaman pendaftaran, anda perlu mencipta templat berasingan untuknya, di dalamnya anda perlu memanggil fungsi dari fail wp-activate.php.

    Menghantar surat pengaktifan

    Halaman pendaftaran menghantar pelawat e-mel dengan pautan untuk mengaktifkan akaun mereka. Secara lalai, ini dilakukan oleh fungsi wpmu_signup_user_notification() daripada fail ms-functions.php. Anda boleh meminjam fungsinya untuk fungsi anda sendiri. Sebab untuk mengelak daripada menggunakan ciri ini ialah ia menghantar pautan pengaktifan akaun daripada wp-activate.php. Anda boleh "mematikan" fungsi ini menggunakan penapis wpmu_signup_user_notification, mengembalikannya palsu (jika ini tidak dilakukan, surat pengaktifan akan dihantar dua kali, okay, sebenarnya dua huruf berbeza).

    Fungsi armyofselenagomez_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // ... // Kod daripada fungsi wpmu_signup_user_notification() wp_mail($user_email, wp_specialchars_decode($subject), $message_headers, $message_headers ; return false; ) add_filter("wpmu_signup_user_notification", "armyofselenagomez_wpmu_signup_user_notification", 10, 4);

    Hasilnya, halaman pendaftaran dalam tema Selena mula kelihatan lebih bersih dan kemas.

    Kesimpulan

    Terdapat banyak cara lain yang tidak begitu betul di Internet untuk melakukan perkara yang sama - ubah hala Apache, borang AJAX yang tidak akan berfungsi tanpa Skrip Java, dll. Saya tidak begitu menyukai semua ini, jadi saya cuba melakukannya dengan betul seperti mungkin di laman web saya sendiri.

    Saya ambil perhatian bahawa anda harus mengedit fail dengan berhati-hati dan cuba untuk tidak menyimpang terlalu banyak daripada yang asal, supaya pada masa hadapan, jika WordPress menukar fail wp-signup.php dan wp-activate.php, ia akan lebih mudah untuk membandingkan mereka antara satu sama lain untuk mencari perubahan.

    Jangan lupa untuk melihat kod sumber semua fungsi yang diterangkan di atas untuk memahami sepenuhnya perkara dan bagaimana yang berlaku di dalam kod.

    Bonus. Perlindungan daripada spammer

    Malah tapak WordPress terkecil sering dibelenggu oleh pendaftaran spam. Anda boleh menulis syarat yang tidak berkesudahan untuk menapis bot, selalunya lebih seperti percubaan untuk mencipta kecerdasan buatan :) Dalam kes multisite, ubah hala biasa dalam Apache banyak membantu saya, dengan bantuannya saya meminta 404 semasa membuka / wp-signup.php dan /wp-acitvate.php (Saya bukan pakar dalam mengkonfigurasi Apache, jadi peraturan saya mungkin tidak betul).

    RewriteEngine On RewriteBase / RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # BEGIN WordPress # Kami tidak menyentuh peraturan dari WordPress secara lalai :) # ... # END WordPress

    P.S. Saya cuba menerangkan beberapa perkara pihak ketiga dengan seberapa terperinci yang mungkin, kerana apabila saya mula, kadang-kadang tiada sesiapa yang mencadangkan dan menerangkan banyak perkara. Saya juga percaya bahawa petua kecil mengenai bahan lain akan menggalakkan seseorang untuk mempelajari sesuatu yang baharu dan mengembangkan bidang pengetahuan mereka. Entri RewriteRule menggunakan ungkapan biasa, ia tidak rumit sama sekali, contohnya, simbol ^ bermaksud permulaan baris.

    Iklan

    ln[-FFhinsv] fail asal [ fail_target ] ln [-Ffhinsv] fail asal ... direktori_sasaran pautan fail_sumber_fail_target Program ln mencipta entri direktori (pautan) dengan nama, fail_target. hidup fail_target mod yang sama yang dihidupkan fail asal. Pautan membolehkan anda mempunyai berbilang salinan fail atau direktori yang sama, terletak di lokasi yang berbeza, tanpa mengambil ruang cakera. Terdapat dua jenis pautan, pautan keras dan pautan simbolik. Bagaimanakah pautan itu menghala ke fail asal, bergantung pada jenis pautan.

    Perintah ln mempunyai pilihan berikut: -f Jika fail_target sudah wujud, padamkannya supaya pautan itu boleh dibuat. Pilihan ini mengatasi pilihan -i. -F Jika fail_target sudah wujud dan merupakan direktori, alih keluarnya supaya pautan itu boleh dibuat. Pilihan -F digunakan bersama dengan -f atau pilihan -i, jika tiada satu pun daripadanya dinyatakan, pilihan itu tersirat -f. Pilihan ini tidak berfungsi tanpa pilihan -s. -h Jika fail_target atau direktori_sasaran adalah pautan simbolik, jangan ikutinya. Pilihan ini berguna dalam kombinasi dengan pilihan -f untuk menggantikan pautan simbolik yang menghala ke direktori. -i Mod interaktif. Jika fail_target wujud, pengguna akan digesa untuk memadam. Jika mereka bersetuju, ln akan memadam fail_target dan akan membuat pautan baharu. Pilihan ini mengatasi pilihan -f. -n Sama dengan pilihan -h, untuk keserasian dengan pelaksanaan program lain ln. -s Buat pautan simbolik. -v Mod untuk memaparkan maklumat tentang pelaksanaan program ln. Secara lalai, program ln mencipta pautan keras. Pautan keras ke fail tidak berbeza daripada fail sumber, manakala perubahan yang dibuat pada fail tidak bergantung pada nama yang mana ia diakses. Pautan keras tidak boleh menjadi pautan ke direktori, dan juga tidak boleh ditempatkan di luar sistem fail tertentu. Pautan simbolik mengandungi nama fail yang dipautkan. Semasa melakukan operasi buka(2) fail asal digunakan di atas pautan simbolik. Panggil stat(2) dilaksanakan pada pautan simbolik juga akan mengembalikan fail asal. Untuk mendapatkan maklumat tentang pautan yang anda boleh gunakan lstat(2). Untuk membaca kandungan pautan simbolik, anda boleh menggunakan panggilan tersebut pautan baca(2). Tidak seperti pautan keras, pautan simbolik boleh berada pada sistem fail yang berbeza dan boleh menghala ke direktori. Dengan satu atau dua hujah, program ln mencipta pautan ke yang sedia ada fail asal. Nama untuk pautan akan diambil daripada hujah fail_target. Jika dalam hujah fail_target, direktori untuk mencipta pautan tidak ditentukan, direktori semasa akan digunakan, jika hanya direktori ditentukan, pautan akan dibuat ke elemen terakhir dari fail asal. Dengan lebih daripada dua hujah, program ln mencipta pautan dalam direktori_sasaran ke semua laluan yang ditentukan dalam fail asal. Pautan diberikan nama fail sumber. Jika program ln, dipanggil dalam borang pautan, ia diluluskan tepat dua hujah, hujah yang diluluskan tidak boleh menjadi direktori, dan ia tidak menerima sebarang pilihan dalam borang ini. Ini adalah satu bentuk penggunaan yang mudah. Pilihan Keserasian -h, -i, -n Dan -v, bertujuan untuk keserasian dengan pelaksanaan program yang lain ln, dan tidak disyorkan untuk digunakan dalam skrip. Pilihan -F adalah tambahan untuk