Σας επιτρέπει να χρησιμοποιείτε μία εγκατάσταση WordPress για πολλούς ιστότοπους ταυτόχρονα. Σε αυτήν την περίπτωση, κάθε ιστότοπος παίρνει τους δικούς του πίνακες στη βάση δεδομένων με ένα μοναδικό πρόθεμα.

Οι πίνακες με τα δεδομένα των εγγεγραμμένων χρηστών είναι κοινοί για όλους τους δικτυακούς τόπους. Αυτό είναι ένα σαφές πλεονέκτημα και με την εγγραφή σας μόλις αποκτήσετε πρόσβαση σε πολλούς ιστότοπους. Επιπλέον, σε κάθε ιστότοπο ο ίδιος λογαριασμός μπορεί να έχει διαφορετικά δικαιώματα. Για παράδειγμα, ένας χρήστης μπορεί να είναι συντάκτης σε έναν ιστότοπο και διαχειριστής σε έναν άλλο.

Στο κανονικό εγκατάσταση του WordPressη σελίδα εγγραφής, εξουσιοδότησης και επαναφοράς κωδικού πρόσβασης εμφανίζει το αρχείο wp-login.php.

  • wp-login.php - εξουσιοδότηση
  • wp-login.php?action=register - εγγραφή
  • wp-login.php?action=lostpassword - επαναφορά κωδικού πρόσβασης

Στη λειτουργία Multisite, ο πυρήνας του WordPress αρχίζει να συμπεριφέρεται λίγο διαφορετικά και όταν κάνετε κλικ στον σύνδεσμο wp-login.php?action=register, θα ανακατευθύνει στο wp-signup.php . Αυτή είναι η σελίδα εγγραφής του δικτύου σας που συνοδεύεται από το WordPress από προεπιλογή.

Εκτός από την εγγραφή λογαριασμών κανονικών χρηστών, μπορείτε επίσης να δημιουργήσετε μια νέα τοποθεσία σε αυτήν εάν ο υπερ-διαχειριστής έχει ενεργοποιήσει αυτήν τη δυνατότητα στις ρυθμίσεις δικτύου (Διαχειριστής δικτύου → Ρυθμίσεις → Ρυθμίσεις δικτύου).

Στα περισσότερα θέματα, η σελίδα εγγραφής δεν φαίνεται πολύ καλή. Πολλά θέματα χρησιμοποιούν πλαίσια CSS όπως το Bootstrap και τις δικές τους συγκεκριμένες κλάσεις για να διαμορφώσουν διαφορετικά στοιχεία στη σελίδα, επομένως είναι δύσκολο να γράψετε ένα ενιαίο HTML που να ταιριάζει σε όλους.

Αλλά μην απελπίζεστε αν η σελίδα φαίνεται ακατάστατη. Το αρχείο wp-signup.php είναι εξαιρετικό στην αρχή, όταν δεν έχετε χρόνο να επεξεργαστείτε κάθε λεπτομέρεια του ιστότοπου - μπορείτε να εστιάσετε σε άλλες πιο σημαντικές σελίδες και περιεχόμενο.

Όταν είστε έτοιμοι να δημιουργήσετε τη δική σας σελίδα εγγραφής, το wp-signup.php είναι μια καλή αναφορά και παράδειγμα για να σας βοηθήσει να κατανοήσετε το εύρος των δυνατοτήτων που παρέχει το WordPress για την επεξεργασία και την επικύρωση των εισροών των χρηστών και τη δημιουργία νέων λογαριασμών.

Κύριος ιστότοπος δικτύου

Από προεπιλογή, το WordPress ανοίγει τη σελίδα εγγραφής (wp-signup.php) στον κύριο τομέα (ιστότοπο) του ιστού. Ωστόσο, μπορείτε να δημιουργήσετε σελίδες εγγραφής για κάθε τοποθεσία στο δίκτυο, ακόμα κι αν έχουν θέματα.

Θα εξετάσουμε την περίπτωση όταν όλοι οι ιστότοποι στο δίκτυο χρησιμοποιούν το ίδιο θέμα, αλλά καθένας από αυτούς έχει μια σελίδα εγγραφής. Οι ιστότοποι διαφέρουν ως προς τη γλώσσα (Αγγλικά και Ρωσικά), επομένως η σελίδα εγγραφής θα εμφανίζεται στη "μητρική" γλώσσα του ιστότοπου. Σε περίπτωση που οι ιστότοποι χρησιμοποιούν διαφορετικά θέματα, όλα θα εξαρτηθούν από το ποια θέματα είναι, εάν η ίδια διάταξη είναι κατάλληλη για αυτούς (μια εξαιρετική κατάσταση που μπορεί να σας ωθήσει να ενοποιήσετε όλα τα θέματα σας) ή αν αξίζει να αναπτύξετε σελίδες ξεχωριστά.

functions.php εναλλακτική

Αρχειοθέτηση παραγγελίας

Τα πρόσθετα MU μπορούν να περιέχουν οποιονδήποτε αριθμό αρχείων και δομής που σας φαίνεται λογικό. Ακολουθώ μια ιεραρχία όπως αυτή:

| mu plugins | | load.php | | δίκτυο selena | | | εγγραφή | | | | plugin.php | | | ... | | | jetpack | | | | plugin.php

Στο αρχείο load.php συνδέονται οι μεταφράσεις και όλα τα απαραίτητα "πρόσθετα":

// Φόρτωση μεταφράσεων για προσθήκες MU load_muplugin_textdomain("selena_network", "/selena-network/languages/"); // Η λειτουργικότητα για τη σελίδα εγγραφής απαιτεί WPMU_PLUGIN_DIR. "/selena-network/signup/plugin.php"; // Μια άλλη προσθήκη // απαιτεί WPMU_PLUGIN_DIR ...

Οι φάκελοι των προσθηκών αποθηκεύονται στον κατάλογο του δικτύου selena. Το καθένα έχει το δικό του plugin.php , το οποίο συμπεριλαμβάνουμε στο load.php . Αυτό δίνει ευελιξία και τη δυνατότητα άμεσης απενεργοποίησης και ενεργοποίησης μεμονωμένα εξαρτήματαγια το έργο εργασίας σε περίπτωση έκτακτης ανάγκης.

Σελίδα εγγραφής

Έχοντας καταλάβει πού και πώς θα γράψουμε τον κωδικό, μπορούμε να προχωρήσουμε στη δημιουργία της σελίδας εγγραφής.

Ας δημιουργήσουμε μια σελίδα με τη διεύθυνση example.org/signup/ μέσω της συνηθισμένης διεπαφής. Μπορείτε να χρησιμοποιήσετε οποιαδήποτε διεύθυνση URL που φαίνεται κατάλληλη για το έργο σας ως διεύθυνση.

Ανακατεύθυνση στην απαιτούμενη σελίδα εγγραφής

Για να γνωρίζει το WordPress για τη νέα μας σελίδα εγγραφής και να ανακατευθύνει σε αυτήν, όταν κάνετε κλικ στον σύνδεσμο «Εγγραφή», χρησιμοποιείται το φίλτρο wp_signup_location. Μπορεί να βρεθεί μέσα στο wp-login.php και είναι υπεύθυνο για την ανακατεύθυνση στο wp-signup.php από προεπιλογή.

Υπόθεση "register" : if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); έξοδος; // ...

Όπως θυμάστε, από προεπιλογή, η σελίδα εγγραφής ανοίγει στον κύριο τομέα δικτύου. Γι' αυτό χρησιμοποιείται εδώ το network_site_url().

Ας προσθέσουμε τον χειριστή μας στο φίλτρο στο mu-plugins/selena-network/signup/plugin.php , το οποίο θα δώσει τη διεύθυνση της σελίδας εγγραφής στον τρέχοντα ιστότοπο:

Συνάρτηση selena_network_signup_page($url) ( return home_url("signup"); ) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

Το selena_network είναι ένα πρόθεμα που χρησιμοποιώ στα ονόματα όλων των λειτουργιών εντός των προσθηκών MU στον ιστότοπό μου για την αποφυγή συγκρούσεων, θα πρέπει να αντικατασταθεί με το δικό μου μοναδικό πρόθεμα. Προσθέστε την προτεραιότητα φίλτρου 99 επειδή ορισμένες προσθήκες όπως το bbPress και το BuddyPress μπορούν να αντικαταστήσουν αυτήν τη διεύθυνση με τη δική τους (οι προσθήκες MU φορτώνονται πριν από τις κανονικές προσθήκες, βλέπε παραπάνω).

Σημειώστε ότι χρησιμοποιείται το home_url(), το οποίο, σε αντίθεση με το network_site_url() , επιστρέφει τη διεύθυνση της τρέχουσας τοποθεσίας και όχι της κύριας τοποθεσίας του δικτύου.

λειτουργικότητα wp-signup.php

Το αρχείο wp-signup.php περιέχει πολλές συναρτήσεις και κώδικα. Για να δείτε τη μεγάλη εικόνα, μπορείτε να χρησιμοποιήσετε το δίπλωμα κώδικα. Κατά κανόνα, στα αγγλικά αυτό ονομάζεται "code folding".

Στην αρχή του αρχείου από τις γραμμές 1 έως 80 (στην έκδοση 4.1.1) διάφορους ελέγχουςκαι εμφάνιση της "έναρξης" της σελίδας με get_header() .

Στη συνέχεια, δηλώνονται πολλές μέθοδοι και πριν αρχίσουμε να εργαζόμαστε με αυτές, αξίζει να καταλάβουμε τι κάνει κάθε συνάρτηση. Πολλοί από αυτούς χρησιμοποιούν συχνά άλλες συναρτήσεις με πρόθεμα wpmu_, οι οποίες δηλώνονται στο αρχείο wp-includes/ms-functions.php. Αυτή η ενότητα είναι δύσκολο να κατανοηθεί χωρίς να δείτε μόνοι σας τον κώδικα. Παρακάτω είναι μια σύντομη περιγραφή των κύριων λειτουργιών σε περίπτωση που αντιμετωπίζετε δυσκολίες.

  • wpmu_signup_stylesheet() - Εξαγωγή επιπλέον CSS στη σελίδα εγγραφής.
  • show_blog_form() - πεδία για εγγραφή ιστότοπου (διεύθυνση, όνομα, ορατότητα για τις μηχανές αναζήτησης).
  • validate_blog_form() - Επικυρώνει την καταχωρημένη διεύθυνση και τον τίτλο του ιστότοπου χρησιμοποιώντας την wpmu_validate_blog_signup() .
  • show_user_form() - πεδία για εγγραφή χρήστη (σύνδεση και διεύθυνση email).
  • validate_user_form() - επικύρωση της εισαγόμενης διεύθυνσης σύνδεσης και email. αλληλογραφία με wpmu_validate_user_signup() .
  • signup_another_blog() - πεδία για την εγγραφή νέων τοποθεσιών χρησιμοποιώντας show_blog_form() για χρήστες που είναι ήδη εγγεγραμμένοι στον ιστότοπο.
  • validate_another_blog_signup() - Επικυρώνει τη διεύθυνση και τον τίτλο του ιστότοπου με validate_blog_form() .
  • signup_user() είναι η κύρια λειτουργία για την εμφάνιση των πεδίων της σελίδας εγγραφής.
  • validate_user_signup() - Επικυρώνει το όνομα χρήστη και τη διεύθυνση email. αλληλογραφία με validate_user_form() .
  • signup_blog() - πεδία για την εισαγωγή της διεύθυνσης, του ονόματος και της ορατότητας του ιστότοπου (το δεύτερο βήμα εγγραφής) χρησιμοποιώντας το show_blog_form() .
  • validate_blog_signup() - επικυρώνει τη σύνδεση, τη διεύθυνση email. αλληλογραφία, διεύθυνση και όνομα ιστότοπου.

Στο κάτω μέρος του αρχείου wp-signup.php (από τη γραμμή 646 στην έκδοση 4.1.1) βρίσκεται η κύρια λογική της σελίδας εγγραφής, η οποία χρησιμοποιεί όλες τις μεθόδους που περιγράφονται παραπάνω. Αυτό το τμήμα του κώδικα δεν μετακινείται σε συνάρτηση. Στο τέλος, καλείται η get_footer().

Αντιγράψτε τη λειτουργικότητα του wp-signup.php

Στη συνέχεια, θα περιγραφεί η διαδικασία για την αντιγραφή του wp-signup.php σε πρόσθετα MU και την πραγματοποίηση αλλαγών στο "fork". Ίσως αυτό να μην φαίνεται ο σωστός τρόπος. Αντίθετα, μπορείτε να γράψετε τις δικές σας συναρτήσεις για την επικύρωση και την εμφάνιση φορμών από την αρχή χρησιμοποιώντας κλάσεις και όχι κανονικές συναρτήσεις. Κατά τη γνώμη μου, το wp-signup.php έχει ήδη όλη την απαραίτητη λογική για τη σελίδα μας, μένει μόνο να κάνουμε μικρές αλλαγές.

Κατά την ενημέρωση του WordPress, το wp-signup.php αλλάζει επίσης από καιρό σε καιρό, αλλά αυτό δεν σημαίνει ότι θα πρέπει να συγχρονίζετε το "fork" σας με κάθε κυκλοφορία. Οι συναρτήσεις μέσα στο wp-signup.php βασικά δεν κάνουν τίποτα άλλο εκτός από την έξοδο HTML, την επικύρωση δεδομένων, τη δημιουργία λογαριασμού και τοποθεσίας και τις μεθόδους με πρόθεμα wpmu_ που δηλώνονται στο ms-functions.php.

Ας δημιουργήσουμε μια συνάρτηση που θα εμφανίζει τη φόρμα εγγραφής στη σελίδα. Για να το κάνετε αυτό, αντιγράψτε το wp-signup.php από τη ρίζα του WordPress στο mu-plugings/selena-network/signup/ . Συνδέστε το μέσα στο mu-plugins/selena-network/signup/plugin.php).

Απαιτείται WPMU_PLUGIN_DIR . "/selena-network/signup/wp-signup.php";

Καταργήστε όλους τους απαιτούμενους και περιττούς ελέγχους από την αρχή του αντιγραμμένου αρχείου. Στην έκδοση 4.1.1, αυτός είναι όλος ο κώδικας από τις γραμμές 1 έως 80.

Τώρα είμαστε έτοιμοι να δημιουργήσουμε κύρια λειτουργίαγια να εμφανίσετε τη φόρμα εγγραφής. Για να γίνει αυτό, θα μεταφέρουμε όλη τη λογική από τη γραμμή 646 μέχρι το τέλος του αρχείου σε μια συνάρτηση που ονομάζεται selena_network_signup_main. Στο τέλος, θα αφαιρέσουμε δύο επιπλέον κλεισίματα

(γραμμές 722 και 723), καθώς και η κλήση στο get_footer() .

Στη νεοδημιουργηθείσα selena_network_signup_main() , στην αρχή θα δηλώσουμε την καθολική μεταβλητή active_signup , η οποία χρησιμοποιείται από όλες τις άλλες μεθόδους από αυτό το αρχείο. Και προσθέστε μια κλήση στο συμβάν before_signup_form, το οποίο αφαιρέσαμε από την αρχή του αρχείου.

Συνάρτηση selena_network_signup_main() ( καθολική $active_signup; do_action("before_signup_form"); // ... )

Τώρα μένει μόνο να αλλάξετε τη διάταξη σε όλα τα μέρη όπου είναι απαραίτητο και η σελίδα εγγραφής είναι έτοιμη.

Έξοδος φόρμας εγγραφής

Υπάρχουν τουλάχιστον δύο επιλογές εδώ. Ένας πιο βολικός τρόπος είναι να δημιουργήσετε έναν σύντομο κώδικα και να τον τοποθετήσετε στη σελίδα μέσω ενός κανονικού επεξεργαστή.

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

Η δεύτερη επιλογή είναι να δημιουργήσετε ένα πρότυπο σελίδας page-signup.php στον φάκελο θυγατρικών θεμάτων. Αντί για τη λέξη "εγγραφή", μπορείτε να χρησιμοποιήσετε ένα μοναδικό αναγνωριστικό που έχει εκχωρηθεί στη σελίδα. Μέσα στο πρότυπο, προσθέστε την απαραίτητη διάταξη και πραγματοποιήστε μια κλήση στη selena_network_signup_main() στο σωστό μέρος.

Ως αποτέλεσμα, η σελίδα εγγραφής μου φαίνεται πολύ καλύτερη και καθαρότερη.

Σελίδα ενεργοποίησης

Με Προεπιλογή του WordPressχωρίζει υπό όρους τη διαδικασία εγγραφής στο Multisite σε δύο βήματα - συμπλήρωση μιας φόρμας στον ιστότοπο και ενεργοποίηση λογαριασμού όταν κάνετε κλικ σε έναν σύνδεσμο που αποστέλλεται σε ένα μήνυμα ηλεκτρονικού ταχυδρομείου. Αφού συμπληρώσετε τη φόρμα που δημιουργήθηκε στην προηγούμενη ενότητα, το WordPress στέλνει ένα μήνυμα ηλεκτρονικού ταχυδρομείου με ορισμένες οδηγίες και έναν σύνδεσμο για την ενεργοποίηση του λογαριασμού σας.

Το αρχείο wp-activate.php που βρίσκεται στον ριζικό κατάλογο του WordPress είναι υπεύθυνο για την εμφάνιση της σελίδας ενεργοποίησης. Το wp-activate.php μπορεί επίσης να αλλάξει εντελώς. Η διαδικασία είναι παρόμοια με αυτή που κάναμε ήδη για το wp-signup.php .

Ας δημιουργήσουμε τη σελίδα example.org/activate/ μέσω της συνηθισμένης διεπαφής. Για τη διεύθυνση, χρησιμοποιήστε οποιαδήποτε διεύθυνση URL που σας φαίνεται κατάλληλη.

Αντιγράψτε το αρχείο wp-activate.php στις προσθήκες MU και συμπεριλάβετέ το στο mu-plugins/selena-network/signup/plugin.php.

Απαιτείται WPMU_PLUGIN_DIR . "/selena-network/signup/wp-activate.php";

Δεν υπάρχει πολύ περιεχόμενο μέσα, σε αντίθεση με το wp-signup.php . Το αρχείο εκτελεί μία μόνο λειτουργία - ενεργοποιεί τον λογαριασμό εάν ληφθεί το σωστό κλειδί και εμφανίζει ένα μήνυμα σφάλματος ή επιτυχίας.

Ας καταργήσουμε όλους τους περιττούς ελέγχους και ας απαιτήσουμε - γραμμές 1 έως 69 στο WordPress 4.1.1. Στο τέλος, θα αφαιρέσουμε την κλήση get_footer(). Το υπόλοιπο περιεχόμενο θα μεταφερθεί στη συνάρτηση selena_network_activate_main().

Είναι ενδιαφέρον να σημειωθεί ότι εδώ, πριν από τη φόρτωση του WordPress (wp-load.php), δηλώθηκε η σταθερά WP_INSTALLING. Η παρουσία του κάνει το WordPress να μην φορτώνει πρόσθετα.

Όπως και στην περίπτωση της σελίδας εγγραφής, απομένει μόνο η διόρθωση της διάταξης όπου χρειάζεται. Μπορείτε επίσης να αλλάξετε το κείμενο των εμφανιζόμενων μηνυμάτων (σε αυτήν την περίπτωση, μην ξεχάσετε να προσθέσετε τον τομέα κειμένου των προσθηκών MU σε όλες τις λειτουργίες του μεταφραστή, δεν έχει οριστεί πουθενά από προεπιλογή).

Η έτοιμη συνάρτηση μπορεί να χρησιμοποιηθεί σε μια προ-δημιουργημένη σελίδα μέσω ενός σύντομου κώδικα ή ενός ξεχωριστού προτύπου σε ένα θυγατρικό θέμα.

Email ενεργοποίησης με σωστούς συνδέσμους

Η σελίδα ενεργοποίησης είναι έτοιμη, αλλά το WordPress δεν το γνωρίζει και θα εξακολουθεί να στέλνει μηνύματα ηλεκτρονικού ταχυδρομείου ενεργοποίησης με έναν σύνδεσμο στο wp-activate.php . Σε αντίθεση με το wp-signup.php, δεν υπάρχει φίλτρο που να σας επιτρέπει να αλλάξετε τη διεύθυνση. Αντίθετα, πρέπει να γράψετε τη δική σας λειτουργία που θα στέλνει email με τους σωστούς συνδέσμους.

Τη στιγμή της συμπλήρωσης και υποβολής της φόρμας στη σελίδα Εγγραφή WordPressκαλεί το wpmu_signup_ χρήστης() ή wpmu_signup_ blog() ανάλογα με τον τύπο της εγγραφής. Και οι δύο λειτουργίες δημιουργούν νέο ρεκόρστον πίνακα wp_signups, συμπληρώνοντάς τον με το απαραίτητο περιεχόμενο, μεταξύ των οποίων είναι και το κλειδί ενεργοποίησης λογαριασμού.

Μετά, ανάλογα με τη συνάρτηση, καλείται το wpmu_signup_ χρήστης _notification() ή wpmu_signup_ blog _Γνωστοποίηση() . Και οι δύο συναρτήσεις έχουν παρόμοια λειτουργικότητα - δημιουργούν και στέλνουν ένα email με έναν σύνδεσμο ενεργοποίησης, αλλά λαμβάνουν διαφορετικά ορίσματα. Και τα δύο έχουν φίλτρα για να «αιχμαλωτίσουν» το συμβάν.

Εάν (! apply_filters("wpmu_signup_user_notification", $user, $user_email, $key, $meta)) επιστρέψει false;

Για να ενεργοποιήσετε λογαριασμούς με τη δημιουργία ιστολογίου:

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

Απομένει μόνο να γράψετε τους δικούς σας χειριστές, μέσα στους οποίους στέλνετε γράμματα μέσω wp_mail() , και στο τέλος φροντίστε να δώσετε false έτσι ώστε το WordPress να μην στείλει μια επιστολή ενεργοποίησης δύο φορές - το ένα είναι δικό σας, το άλλο είναι ένα προεπιλεγμένο γράμμα με έναν σύνδεσμο για το wp-activate.php .

Συνάρτηση selena_network_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // Δημιουργία κεφαλίδας, σώματος και κεφαλίδων email // ... // Αποστολή email ή προσθήκη εργασίας Cron για αποστολή email wp_mail($user_email , wp_specialchars_decode($subject), $message, $message_headers); // Pass false, ώστε το WordPress να μην στέλνει email ενεργοποίησης δύο φορές, return false; ) add_filter("wpmu_signup_user_notification", "selena_network_wpmu_signup_user_notification", );

Εάν στέλνετε μηνύματα ηλεκτρονικού ταχυδρομείου μέσω διακομιστή SMTP ή ο αριθμός των εγγραφών είναι πολύ υψηλός, θα πρέπει να σκεφτείτε να μην στείλετε άμεσα email. Αντίθετα, μπορείτε να προσθέσετε εργασίες Cron χρησιμοποιώντας το WordPress Cron .

Κλείσιμο πρόσβασης στα wp-signup.php και wp-activate.php

Έχοντας δημιουργήσει τις δικές σας σελίδες εγγραφής και ενεργοποίησης, ίσως χρειαστεί να κλείσετε τα «πρωτότυπα». Για παράδειγμα, εάν υπάρχουν επιπλέον πεδία στη σελίδα εγγραφής που πρέπει να συμπληρωθούν. Επίσης, πολλοί ιστότοποι WordPress υπόκεινται σε εγγραφές ανεπιθύμητων μηνυμάτων.

Για να λύσετε δύο προβλήματα σε μία ενέργεια, μπορείτε να ζητήσετε από τον Apache να επιστρέψει το 404 σε περίπτωση που προσπαθήσετε να ανοίξετε αυτές τις σελίδες. Για να το κάνετε αυτό, χρειάζεται απλώς να καταχωρήσετε μερικά επιπλέον RewriteRule στο αρχείο διαμόρφωσής σας ή .htaccess.

RewriteEngine On RewriteBase / # Η γνώση των κανονικών εκφράσεων δεν είναι ποτέ περιττή :) RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # BEGIN WordPress # Αφήστε τους προεπιλεγμένους κανόνες του WordPress :) # ... # END WordPress

συμπέρασμα

Για αυτό και πολλά άλλα «προβλήματα» που σχετίζονται με το WordPress, υπάρχουν πολλές λύσεις στο Διαδίκτυο. Για παράδειγμα, για να δημιουργήσετε σελίδες εγγραφής και ενεργοποίησης, ορισμένοι προτείνουν να ξαναγράψετε τα πρωτότυπα wp-signup.php και wp-activate.php . Αυτό δεν πρέπει να γίνει, γιατί αν ενημερώσεις wordpressθα χάσετε όλες τις αλλαγές που έγιναν στα αρχεία και επίσης δεν θα μπορείτε να ελέγξετε την ακεραιότητα του πυρήνα με το .

Κατά την ανάπτυξη οποιουδήποτε πρόσθετου, θέματος ή λύσης, αφιερώστε λίγο χρόνο για να καταλάβετε τι συμβαίνει στο WordPress. Υπάρχουν πολλά χρήσιμα εργαλεία εντοπισμού σφαλμάτων για αυτό.

ΥΣΤΕΡΟΓΡΑΦΟ.

Μπορείτε να χρησιμοποιήσετε την προσθήκη Multisite User Management για να εκχωρήσετε αυτόματα διαφορετικούς ρόλους σε νέους χρήστες.

Εάν έχετε οποιεσδήποτε ερωτήσεις ή δυσκολίες κατά τη δημιουργία σελίδων εγγραφής και ενεργοποίησης μετά την ανάγνωση του άρθρου, αφήστε ένα σχόλιο και σίγουρα θα σας απαντήσουμε.

27.03.2015 27.03.2015

Προγραμματιστής WordPress. Του αρέσει η τάξη σε όλα και να κατανοεί νέα εργαλεία. Εμπνευσμένο από την αρχιτεκτονική των στοιχείων Symfony.

  • --- Επιλογή αποθήκης --- Buffalo Grove IL 60089 Η.Π.Α.(Buffalo Grove IL 60089 USA)) Σικάγο Η.Π.Α. Η.Π.Α. -Seine) Republica Moldova , Falesti(s.Fagadau) South Kensington(Bute street) Adler(Quiet lane 2, Kudepsta area) Aktobe(47/2 Aktobe street) Almetievsk(Almetievsk, Lenin street 13, office 306) Anapa (88 Terskaya) St., 3ος όροφος) Astrakhan (17 Kommunisticheskaya St., γραφείο 4) Atyrau (Atyrau, Azattyk Ave. 42, office 206) Berdyansk (περιοχή Zaporozhye) Bishkek ( Bishkek, 32B Chui avenue, εμπορικό κέντρο "Izumrud" γραφείο ) Blagoveshchensk (50 Let Oktyabrya 15. Γραφείο "Amur Fair" 575) Buguruslan (οδός Krasnoznamnaya οδός Krasnaya, 61 (2ος όροφος) κέντρο της πόλης) Vladivostok (οδός Svetlanskaya 147, γραφείο 2/4) olgograd (πόλη του Volgograd autostrad Aviators 15 warehouse 23) Dyurtyuli (st. Agidel d.4 kv.2) Yeysk (st. Pervomayskaya 56, γραφείο 308) Yekaterinburg (10 Mamin-Sibiryak St., γραφείο 3) Ivanovo (Sheremetevsky prospect, 85G, Premium Plaza Business Center 2ος όροφος, γραφείο 212) Izhevsk (Lenina 21, γραφείο 304. Business Center "Izberba Forumsh") (Chapaeva 4 ind. 368501) Irkutsk (Irkutsk, οδός Gornaya 4 (δίπλα στο εμπορικό κέντρο Karamel) γραφείο 407) Ishimbay (Zorge, σπίτι 18) Yoshkar-Ola (24v Lenin Ave., office 318) Kazan ( lane One- πλευρικό σπίτι Grivki 10, σταθμός μετρό "Kozya Sloboda" επίσης οδός Dekabristov, 85 "B" Επιχειρηματικό κέντρο "Relita" γραφείο 411) Kamensk-Uralsky (Prospekt Pobeda 56) Kemerovo (οδός Demyan Bedny, 1 γραφείο 401) Κίεβο (οδός Olevskaya . 9 kv.4 (άφιξη με προηγούμενη κλήση) Komsomolsk-on-Amur (οδός Shikhanova 10, είσοδος γραφείου 1 από την Komsomolskaya από το τέλος του κτιρίου.) Kostroma (Prospect Mira 51, γραφείο 15) .Krasnaya 124 γραφείο 302) Krasnoyarsk (pr. Krasnoyarsky εργάτης, 120 εμπορικό κέντρο "Krasnoyarye") Lviv (Sobornaya Square 12A) Makhachkala (Akushkinogo 9v) Miass (st. 30 let VLKSM 85) Minsk (Korzhenevskogo, 26) Moscow (SobornayaSt.H, Metro: 10, κτίριο 4, γραφείο 10 6) Μόσχα (λεωφόρος Simferopolsky) Μόσχα (Λωρίδα Glazovsky 5, είσοδος στην αψίδα, η πόρτα στα αριστερά του σταθμού του μετρό: Smolenskaya-500m, Kropotkinskaya-1km., Park Kultury-1km.) Μόσχα (μ. Τσέχοφσκαγια, Πούσκινσκαγια, Τβέρσκαγια. Strastnoy Boulevard, 6, κτίριο 1, Business Center, γραφείο 421) Μόσχα (Lobnya, Mayakovskogo st., 4A, TR1, 3ος όροφος, γραφείο 301) Μόσχα (Σταθμός μετρό Molodezhnaya, οδός Yartsevskaya, κτήριο 27 9 Κέντρο βελτίωσης υγείας "Four Elements») Μόσχα (Krasnaya Presnya 38-45) Μόσχα (St. Μόσχα μ. Taganskaya ακτινωτή έξοδος 3, 30 μέτρα από το μετρό. αγ. Bolshiye Kamenshchiki 1, 4ος όροφος, γραφείο 30) Μόσχα (σταθμός μετρό Leninsky Prospekt, Vavilova 9A, κτίριο 6, γραφείο 10 B, 3ος όροφος) Μόσχα (σταθμός μετρό Novoslobodskaya, Mendeleevskaya, Mayakovskaya, Belorusskaya (ακτινική). 4th Tverskaya Street - , 24. Είσοδος μέσα από την αψίδα, PET SHOP) Μόσχα (μετρό Belorusskaya (δακτύλιος), 5 μέτρα από την έξοδο του μετρό. Πλατεία Tverskaya Zastava, 3, 3ος όροφος, γραφείο 321. Κοντά στο σιδηροδρομικό σταθμό Belorussky. ) Μόσχα (M. ALTUFIEVO , Pskovskaya st., 6) Μόσχα (Μόσχα, Radio st. , είσοδος 2, γραφείο 2) Naberezhnye Chelny (Sh.Usmanova st. 122 kb. 111 1ος όροφος) Nalchik (Nalchik, Kirov st. 292a, 2ος όροφος, γραφείο 6 ) Nakhodka (οδός Pogranichnaya 6, δωμάτιο 304) Nevinnomyssk (Pl. 50 Let Oktyabrya 8A) Nefteyugansk (οικία μικροπεριφέρειας 12 7) Nizhnevartovsk (Nizhnevartovsk, οδός Mira 31B.) Nizhny Novgorod st.OL office1339 κέντρο)) Nizhny Novgorod (m. Gorkovskaya, st. Kostina, 3, BC "New Square", 2ος όροφος, γραφείο 239) Nizhny Tagil (στο λ. Krasnoarmeyskaya d.42a, γραφείο 3ου ορόφου 4) Nizhny Tagil (Nizhny Tagil, st. Papanina 5, office 1, Kushva, Gornyakova st. 4) Novosibirsk (Street, Oktyabrskaya 42 office 601, Business center περίπου στην πλατεία Λένιν, κινηματογράφος Mayakovsky) Novosibirsk (οδός Gogol 33/1. 20 μέτρα από τον εμπορικό σταθμό του μετρό Marshal Pokryshkina, Gogol κέντρο.) Novotroitsk (Sovetskaya d st. .144 sq. 26) Novy Urengoy (μικροπεριφέρεια Druzhba, οικία 4/3, διαμ. 183) Norilsk (Leninsky prospekt 47a of. 79) Nur-Sultan (Astana) (Beibitshilik 1 Marden, γραφείο 708) Οδησσός (b -r Γαλλικά 60 διεπιστημονικό σανατόριο αποκατάστασης "SARTUS") Oktyabrsky (Microdistrict 32a, house 6, apt. 88) Omsk (5 Severnaya st. πρώτος όροφος, δεξιά βεράντα.) Orsk (Λενίν 93 ) Pavlodar (Satpaev St. 71 office 107) Perm (Sovietskaya d.52 office 1) Perm (Druzhby St. 34 office 305) Pyt-Yakh (Microdistrict 5, house 5) Pyatigorsk (st. 295 Rifle Division και 13 k.2) Rostov-on-Don (Soborny lane 21 office 10 B) Salavat (οδός Lenina, σπίτι 3 γραφείο 209, 2ος όροφος) Samara (οδός Novo-Sadovaya 106, γραφείο 804, αριστερό ασανσέρ, 8ος όροφος) St. Πετρούπολη (μετρό: Vasileostrovskaya, 13th line of Vasilyevsky Island, 78, office 182) Αγία Πετρούπολη (σταθμός μετρό Dostoevskaya (5 μέτρα) και σταθμός μετρό Vladimirskaya (300 μέτρα) VLADIMIRSKY PASSAGE 3ος όροφος, κεντρική είσοδος FIRST GALLERY, Vladimirsky 19) Αγία Πετρούπολη (σταθμός μετρό Admiralteyskaya (10 μέτρα) Spasskaya 1 λεπτό περπάτημα Efimov St. 1, όροφος 2, γραφείο 4, Business Center "Sennaya 4", είσοδος στα αριστερά του καφέ "Sever") Saratov (Bolshaya Gornaya St., 359V, γραφείο No. 3) Sevastopol (Ochakovtsev St. 19 , κέντρο "Plaza", ισόγειο, γραφείο 29/2) Snezhinsk (οδός Zababahina 19 a) Sochi (Sochi ko. Donskaya house 15.) Sochi ( Sovetskaya st. 42 office 204) Stavropol (Lomonosov st. 21 office 18) Sterlitamak (85 Khudaiberdina st., 3ος όροφος) Surgut (30 let Pobedy st. 64) Tobolsk (Tobolsk, microdistrict 6, κτίριο 11, office 39ent Λεωφόρος Komsomolsky)) Togliatti (40 ετών) Pobedy, 50, γραφείο 212a, TD Raduga 1ος όροφος) Τομσκ (Tomsk, οδός Sovetskaya 84) Tuymazy (οδός Michurina, 15 γραφείο 2) Tyumen (οδός Gerzen, 72 γραφείο Ulyanovsk 214) Ryabikov street, d 73) Ust-Kamenogorsk (57 Gorky St., office 213) Ufa (Verkhnetorgova Square, 6 (Business Centre NESTEROV)) Khabarovsk (Postysheva St., 16 office από 108) Khanty-Mansiysk (Γ. Khanty-Mansiysk, st. Karl Marx 15, 2ος όροφος.) Chelyabinsk (168 Pobedy Ave., 3rd floor, office 36.) Cherkessk (101 Lenina St.) Chita (104 Babushkina St., office 425) Chishmy (17 Ring Road) Chishmy (Friendship Ave. , 1B) Ελβετία (Arosio via Terra Sotto, 1 6939) Shymkent (οδός Kolkhoznaya 47) Yuzhno-Sakhalinsk (λωρίδα Angarsky 21) Yakutsk (οδός Dzerzhinsky 8 / 3b) Yakutsk (Yakutsk) embank,EC Συντριβάνι, 4ος όροφος) Yanaul (οδός Sovetskaya, 23, γραφείο N 8 κτίριο Berezka) Yaroslavl (57 Εκθεσιακός χώρος) Yaroslavl (οδός Chkalova 2) Birsk Bashkortostan () ?>

    Συχνά τίθεται το ερώτημα πώς να τοποθετήσετε μια φόρμα σε όλες τις σελίδες της εφαρμογής Zend. Ας υποθέσουμε ότι θέλω να τοποθετήσω τη φόρμα συνδρομής στο αρχείο layout.phtml έτσι ώστε να βρίσκεται σε κάθε σελίδα. Η εντολή layout->content() λειτουργεί με ενέργειες και ελεγκτές... Πώς υλοποιούμε λοιπόν αυτό που χρειαζόμαστε;

    Μια λύση σε αυτό το πρόβλημα είναι να δημιουργήσετε έναν βοηθό δράσης.

    Ας ξεκινήσουμε με τη ρύθμιση της εφαρμογής ZF:

    $ zf δημιουργία φόρμας διάταξης έργου $ φόρμα διάταξης cd $ zf ενεργοποίηση διάταξης

    Καθαρίστε το αρχείο application/views/scripts/index/index.phtml και επικολλήστε κάτι σαν αυτό:

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

    Αυτή είναι η αρχική σελίδα

    Τώρα μπορούμε να ξεκινήσουμε.

    Η μορφή

    Ας δημιουργήσουμε νέα μορφή:

    $ zf δημιουργία φόρμας εγγραφής

    Καθώς και τα πεδία που χρειαζόμαστε:

    application/forms/Signup.php:

    Η κλάση Application_Form_Signup επεκτείνει το Zend_Form ( public $processed = false; public function init() ( $this->addElement("text", "name", array("label" => "Name", "required" => true, " validators" => array(array("StringLength", false, array("max"=>75)))))); $this->addElement("text", "email", array("label" = > "Email", "required" => true, "validators" => array(array("StringLength", false, array("max"=>150)), "EmailAddress",))); $this- >addElement("υποβολή", "go", array("label" => "Εγγραφή",)); ) )

    Έχουμε μια φόρμα. Μένει να το βγάλουμε.

    Βοηθός δράσης

    Χρησιμοποιούμε τον βοηθό δράσης για να αρχικοποιήσουμε τη φόρμα.

    Προσθέστε μια γραμμή στο application.ini:

    application/configs/application.ini:

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

    Τώρα το σύστημα ξέρει πού να αναζητήσει βοηθούς δράσης, ώστε να μπορούμε να προχωρήσουμε:

    application/Bootstrap.php:

    bootstrap("frontController"); $signup = Zend_Controller_Action_HelperBroker::getStaticHelper("Εγγραφή"); Zend_Controller_Action_HelperBroker::addHelper($signup); ) )

    Ο βοηθός δράσης θα μοιάζει με αυτό:

    application/controllers/helpers/Signup.php:

    getActionController()->προβολή; $form = new Application_Form_Signup(); $request = $this->getActionController()->getRequest(); if($request->isPost() && $request->getPost("submitsignup")) ( if($form->isValid($request->getPost())) ( $data = $form->getValues() ; // δεδομένα επεξεργασίας $form->processed = true; ) ) $view->signupForm = $form; ) )

    Δεν υπάρχει τίποτα ιδιαίτερο εδώ. Απλά προσέξτε την τάξη των γονέων.

    Προβολή βοηθού

    Για να εμφανίσουμε τη φόρμα, ας δημιουργήσουμε ένα βοηθητικό πρόγραμμα προβολής που μοιάζει με αυτό:

    application/views/helpers/SignupForm.php:

    Εγγραφείτε στο newsletter μας

    "; if($form->επεξεργασμένο) ( $html .= "

    Σας ευχαριστούμε για την εγγραφή σας

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

    Το μόνο που μας μένει είναι να αποδώσουμε τη φόρμα στο layout.phtml:

    application/layouts/scripts/layout.phtml:

    headMeta()->prependHttpEquiv("Content-Type", "text/html; charset=UTF-8"); $this->headTitle("Δοκιμή φόρμας διάταξης"); echo $this->doctype(); ?> headMeta()->setIndent(4); ?>headTitle()->setIndent(4); ?>

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

    Συνέβη

    Αυτό είναι όλο. Έχουμε πετύχει τη λειτουργικότητα που οραματιστήκαμε.

    Εκ … Συνώνυμο λεξικό

    BAINKI, αμετάβλητο. κεφ. (παιδαριώδης). Υπνος. Θέλεις μπούμπες; Ξάπλωσε bainki. Επεξηγηματικό Λεξικό Ushakov. D.N. Ο Ουσάκοφ. 1935 1940... Επεξηγηματικό Λεξικό Ushakov

    Do / do bainki (bye bye). Jarg. λένε Σαΐτα. Υπνος. Μαξίμοφ, 21… Μεγάλο λεξικό ρωσικών ρήσεων

    προδικάζω. ξεδιπλωθεί Σχετικά με την κατάσταση του ύπνου (στην ομιλία των παιδιών ή στη συνομιλία ενηλίκων με παιδιά). II ενθ. ξεδιπλωθεί Χρησιμοποιείται ως συστατικό ενός νανουρίσματος. Επεξηγηματικό Λεξικό Εφραίμ. T. F. Efremova. 2000... Μοντέρνο λεξικόΡωσική γλώσσα Efremova

    bainki- ainki, αμετάβλητο ... Ρωσικό ορθογραφικό λεξικό

    bainki- αμετάβλητο... Ορθογραφικό λεξικό της ρωσικής γλώσσας

    Intl., σε funkt. σκαζ. \u003d Bai Bai (σημείο II) ... εγκυκλοπαιδικό λεξικό

    bainki- ενθ. στο func. σκαζ. = αντίο 2)… Λεξικό πολλών εκφράσεων

    bainki- ba / ink / και, μεταξύ ... Μορφημικό ορθογραφικό λεξικό

    Βιβλία

    • Bainki, Tokmakova I.P. Σε αυτό το βιβλίο μπορείτε να διαβάσετε ή ακόμα και να τραγουδήσετε νανουρίσματα για το μωρό σας. Κόψτε το βιβλίο...
    • Bainki (2006 ed.), Irina Tokmakova. Σε αυτό το βιβλίο, μπορείτε να διαβάσετε ή ακόμα και να τραγουδήσετε νανουρίσματα στο μωρό σας. Κόψτε το βιβλίο. ISBN:5-9524-2404-X…

    Ας δημιουργήσουμε τη δική μας σελίδα εγγραφής σε πολλούς ιστότοπους αντί για την τυπική wp-signup.php .

    ΣΤΟ κανονική εγκατάσταση σελίδα wordpressεγγραφή (εξουσιοδότηση, επαναφορά κωδικού πρόσβασης) εξάγει το αρχείο wp-login.php.

    • /wp-login.php - εξουσιοδότηση
    • /wp-login.php?action=register - εγγραφή
    • /wp-login.php?action=lostpassword - επαναφορά κωδικού πρόσβασης

    Υπάρχουν ξεχωριστές προϋποθέσεις για πολλαπλούς ιστότοπους στο wp-login.php. Έτσι, όταν κάνετε κλικ στο /wp-login.php?action=register σε έναν multisite, το WordPress θα ανακατευθύνει στη σελίδα /wp-signup.php. Σε πολλά θέματα, η σελίδα δεν φαίνεται πολύ ελκυστική, οπότε θα φτιάξουμε τη δική μας.

    Κύριος ιστότοπος δικτύου

    Από προεπιλογή, το WordPress ανοίγει τη σελίδα εγγραφής (wp-signup.php) στον κύριο τομέα (ιστότοπο) του ιστού. Ωστόσο, είναι δυνατό να δημιουργήσετε μια ξεχωριστή σελίδα εγγραφής για κάθε τοποθεσία στο δίκτυο, ακόμα κι αν έχουν διαφορετικά θέματα. Θα εξετάσουμε την περίπτωση που όλοι οι ιστότοποι στο δίκτυο έχουν τη δική τους σελίδα εγγραφής, αλλά χρησιμοποιείται το ίδιο θέμα και οι ιστότοποι διαφέρουν μόνο στη γλώσσα. Εάν χρησιμοποιούνται διαφορετικά θέματα, θα απαιτηθεί περισσότερος κώδικας.

    functions.php;

    Οχι. Το όνομα αυτού του αρχείου φαίνεται να αναφέρεται σε κάθε άρθρο του WordPress. Στην περίπτωσή μας, λαμβάνοντας υπόψη το γεγονός ότι η λειτουργία εγγραφής έχει σχεδιαστεί για πολλούς ιστότοπους, είναι λογικό να μεταφερθεί σε προσθήκες MU που φορτώνονται όταν ανοίγει οποιοσδήποτε ιστότοπος.

    Λυρική παρέκβαση

    Αξίζει να σημειωθεί ότι τα πρόσθετα MU φορτώνονται πριν από τα κανονικά πρόσθετα και πριν από την πλήρη φόρτωση του πυρήνα του WordPress, επομένως η κλήση ορισμένων συναρτήσεων μπορεί να οδηγήσει σε μοιραία σφάλματα στην PHP. Αυτή η «πρώιμη» φόρτωση έχει τα πλεονεκτήματά της. Ας πούμε ότι μέσα σε οποιοδήποτε θέμα δεν μπορείτε να προσκολληθείτε σε ορισμένες ενέργειες που λειτουργούν ακόμη και πριν φορτωθεί το αρχείο functions.php από το θέμα. Ένα παράδειγμα αυτού είναι ενέργειες από το πρόσθετο Jetpack της μορφής jetpack_module_loaded_related-posts (related-posts είναι το όνομα της ενότητας) με τις οποίες είναι δυνατή η παρακολούθηση της δραστηριότητας των λειτουργικών μονάδων στο Jetpack. Αυτή η ενέργεια δεν μπορεί να "επισυναφθεί" από το αρχείο θέματος επειδή η ενέργεια έχει ήδη ενεργοποιηθεί πριν από τη φόρτωση του θέματος - οι προσθήκες φορτώνονται πριν από τα θέματα. Μπορείτε να ρίξετε μια ματιά σε μια γενική εικόνα της σειράς φόρτωσης του WordPress στη σελίδα Αναφορά ενεργειών στον κώδικα.

    Αρχειοθέτηση παραγγελίας

    Τα πρόσθετα MU μπορούν να περιέχουν οποιονδήποτε αριθμό αρχείων και οποιαδήποτε δομή που σας φαίνεται λογική. Ακολουθώ μια ιεραρχία όπως αυτή:

    |-mu-plugins |-|-load.php |-|-|-selena-δίκτυο |-|-|-|-εγγραφή |-|-|-|-|-plugin.php |-|-|-| -|-... |-|-|-|-jetpack |-|-|-|-|-plugin.php

    Στο αρχείο load.php συνδέονται όλα τα απαραίτητα «πρόσθετα» για το δίκτυό μας:

    // Φόρτωση μεταφράσεων για όλα τα πρόσθετα load_muplugin_textdomain("selena_network", "/selena-network/languages/"); // Η εγγραφή δικτύου απαιτεί WPMU_PLUGIN_DIR. "/selena-network/signup/plugin.php"; // Άλλες προσθήκες // απαιτούν WPMU_PLUGIN_DIR ...

    Οι φάκελοι προσθηκών αποθηκεύονται μέσα στο φάκελο selena-network, ο καθένας έχει το δικό του plugin.php , το οποίο συμπεριλαμβάνουμε στο load.php . Αυτό δίνει ευελιξία και τη δυνατότητα γρήγορης απενεργοποίησης και ενεργοποίησης ορισμένων πραγμάτων.

    URL σελίδας εγγραφής

    Το φίλτρο wp_signup_location χρησιμοποιείται για τον καθορισμό της διεύθυνσης της σελίδας εγγραφής. Μπορεί να βρεθεί μέσα στο αρχείο wp-login.php και είναι υπεύθυνο για την ανακατεύθυνση στο wp-signup.php .

    Υπόθεση "register" : if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); exit;

    Ας προσθέσουμε τη συνάρτησή μας στο mu-plugins/selena-network/signup/plugin.php , που θα δώσει τη διεύθυνση της σελίδας εγγραφής στον τρέχοντα ιστότοπο:

    Συνάρτηση selena_network_signup_page ($url) ( return home_url () . "/signup/"; ) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

    Το selena_network είναι ένα πρόθεμα που χρησιμοποιώ στα ονόματα όλων των λειτουργιών εντός των προσθηκών MU στον ιστότοπό μου για την αποφυγή συγκρούσεων, θα πρέπει να αντικατασταθεί με το δικό σας μοναδικό πρόθεμα. Προσθέστε την προτεραιότητα φίλτρου 99 επειδή ορισμένες προσθήκες όπως το bbPress και το BuddyPress μπορούν να αντικαταστήσουν αυτήν τη διεύθυνση με τη δική τους (οι προσθήκες MU φορτώνονται πριν από τις κανονικές προσθήκες, βλέπε παραπάνω). Σημειώστε ότι το home_url() χρησιμοποιείται αντί για το network_site_url() για να διατηρείται ο επισκέπτης στον ίδιο τομέα. Οποιαδήποτε διεύθυνση URL μπορεί να χρησιμοποιηθεί ως διεύθυνση.

    Δημιουργία σελίδας

    Τώρα θα δημιουργήσουμε μια σελίδα με τη διεύθυνση site.com/signup/ μέσω της συνηθισμένης διεπαφής και στον φάκελο θυγατρικών θεμάτων ένα πρότυπο για ΝΕΑ ΣΕΛΙΔΑ- page-signup.php . Αντί για τη λέξη "εγγραφή" μπορείτε να χρησιμοποιήσετε ένα μοναδικό αναγνωριστικό.

    Μέσα στο νέο πρότυπο, πρέπει να καλέσετε τη συνάρτηση selena_network_signup_main(), η οποία θα εμφανίσει τη φόρμα εγγραφής.

    Αξίζει να σημειωθεί ότι η όλη διαδικασία με τα πρότυπα είναι προαιρετική και αντ' αυτού μπορείτε να δημιουργήσετε τον δικό σας σύντομο κώδικα, ο οποίος θα καλεί επίσης τη συνάρτηση selena_network_signup_main().

    wp-signup.php και wp-activate.php

    Τώρα ας δημιουργήσουμε μια συνάρτηση που θα εμφανίζει τη φόρμα εγγραφής. Για να το κάνετε αυτό, αντιγράψτε τα αρχεία wp-signup.php και wp-activate.php από τη ρίζα του WordPress στο mu-plugings/selena-network/signup/ (και μην ξεχάσετε να τα συμπεριλάβετε στο mu-plugins/selena-network /signup/plugin.php) . Περαιτέρω χειρισμοί αρχείων είναι εξαιρετικά δύσκολοι και μακροσκελής να περιγραφούν, επομένως θα πρέπει να τους κάνετε μόνοι σας. Απλώς θα περιγράψω τι ακριβώς πρέπει να γίνει και θα δημοσιεύσω αρχεία πηγήςτου έργου σας:

    1. Στην αρχή του αρχείου, καταργήστε όλα τα απαιτούμενα , τις κλήσεις λειτουργιών και άλλους κωδικούς εκτός συναρτήσεων.
    2. Μετονομάστε όλες τις συναρτήσεις προσθέτοντας μοναδικά προθέματα στα ονόματα.
    3. Τυλίξτε το κάτω μέρος του κώδικα wp-signup.php στη συνάρτηση selena_network_signup_main και γράψτε την καθολική $active_signup στην αρχή. .
    4. Αντικαταστήστε τη διάταξη με τη δική σας στα σωστά σημεία.

    Μέσα στο wp-activate.php πρέπει να κάνετε το ίδιο πράγμα:

    1. Καταργήστε όλο τον κώδικα εκτός συναρτήσεων, τυλίξτε τη διάταξη σε μια ξεχωριστή συνάρτηση.
    2. Αλλάξτε τη διάταξη όπου χρειάζεται.

    Το αρχείο wp-activate.php είναι υπεύθυνο για τη σελίδα ενεργοποίησης λογαριασμού. Όπως και με τη σελίδα εγγραφής, πρέπει να δημιουργήσετε ένα ξεχωριστό πρότυπο για αυτήν, μέσα στο οποίο πρέπει να καλέσετε τη συνάρτηση από το αρχείο wp-activate.php.

    Αποστολή email ενεργοποίησης

    Η σελίδα εγγραφής στέλνει ένα email στον επισκέπτη με έναν σύνδεσμο για την ενεργοποίηση του λογαριασμού. Από προεπιλογή, αυτό γίνεται από τη συνάρτηση wpmu_signup_user_notification() από το αρχείο ms-functions.php. Η λειτουργικότητά του μπορεί να δανειστεί για τη λειτουργία του. Ο λόγος που πρέπει να σταματήσετε να χρησιμοποιείτε αυτήν τη δυνατότητα είναι ότι στέλνει έναν σύνδεσμο ενεργοποίησης λογαριασμού από το wp-activate.php . Μπορείτε να «απενεργοποιήσετε» αυτή τη λειτουργία χρησιμοποιώντας το φίλτρο wpmu_signup_user_notification δίνοντάς της ψευδή (αν δεν γίνει αυτό, η επιστολή ενεργοποίησης θα σταλεί δύο φορές, εντάξει, στην πραγματικότητα δύο διαφορετικά γράμματα).

    Συνάρτηση armyofselenagomez_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // ... // Κώδικας από τη συνάρτηση wpmu_signup_user_notification() wp_mail($user_email, wp_specialchars_ages,$smess$$mes). ; return false; ) add_filter("wpmu_signup_user_notification", "armyofselenagomez_wpmu_signup_user_notification", 10, 4);

    Ως αποτέλεσμα, η σελίδα εγγραφής στο θέμα Selena έχει γίνει πολύ πιο καθαρή και τακτοποιημένη.

    συμπέρασμα

    Υπάρχουν πολλοί άλλοι όχι πολύ σωστοί τρόποι στο Διαδίκτυο πώς να κάνετε το ίδιο - ανακατευθύνσεις Apache, φόρμες AJAX που δεν λειτουργούν χωρίς Java Script, κ.λπ. Δεν μου άρεσαν πολύ όλα αυτά, οπότε προσπάθησα να το κάνω τόσο σωστά όσο είναι δυνατό στον δικό μου ιστότοπο.

    Σημειώνω ότι θα πρέπει να επεξεργάζεστε τα αρχεία προσεκτικά και να προσπαθείτε να μην αποκλίνετε πολύ από τα αρχικά, ώστε στο μέλλον, εάν το WordPress αλλάξει τα αρχεία wp-signup.php και wp-activate.php, να είναι ευκολότερη η σύγκριση να βρουν αλλαγές.

    Μην ξεχάσετε να κοιτάξετε πηγήόλες τις λειτουργίες που περιγράφονται παραπάνω για να κατανοήσετε πλήρως τι και πώς συμβαίνει μέσα στον κώδικα.

    Δώρο. Προστασία ανεπιθύμητων μηνυμάτων

    Ακόμη και οι μικρότεροι ιστότοποι WordPress βομβαρδίζονται συχνά με καταχωρίσεις ανεπιθύμητης αλληλογραφίας. Μπορείτε να γράψετε ατελείωτες συνθήκες για φιλτράρισμα bots, συχνά περισσότερο σαν μια προσπάθεια δημιουργίας τεχνητής νοημοσύνης 🙂 Στην περίπτωση ενός multisite, με βοήθησε πολύ η συνηθισμένη ανακατεύθυνση στο Apache, με την οποία ζήτησα να εκδόσω το 404 κατά το άνοιγμα /wp-signup. php και /wp-acitvate.php (δεν είμαι ειδικός στις ρυθμίσεις Apache, επομένως οι κανόνες μου μπορεί να μην είναι πολύ σωστοί).

    RewriteEngine On RewriteBase / RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # BEGIN WordPress # Προεπιλεγμένοι κανόνες WordPress :) # ... # ΤΕΛΟΣ WordPress

    P.S. Προσπαθώ να περιγράψω κάποια πράγματα τρίτων με όσο το δυνατόν περισσότερες λεπτομέρειες, γιατί όταν ξεκίνησα, μερικές φορές δεν υπήρχε κανείς να προτρέψει και να εξηγήσει πολλά πράγματα. Πιστεύω επίσης ότι τέτοιες μικρές συμβουλές για άλλα υλικά θα ωθήσουν κάποιον να μάθει κάτι νέο και να διευρύνει τον τομέα γνώσης του. Χρήση καταχωρήσεων RewriteRule κανονικές εκφράσεις, δεν είναι καθόλου περίπλοκα, για παράδειγμα, το σύμβολο ^ σημαίνει την αρχή μιας γραμμής.