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

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

Τι εργαλεία μας δίνει το WordPress για να καταστήσουμε αυτό το σενάριο δυνατό; Μας επιτρέπει να καταχωρίσουμε επιλογές με το σύστημα και να τις ανακτήσουμε με την ανατεθείσα ταυτότητα - το API Options είναι υπεύθυνο γι 'αυτό. Το WordPress παρέχει επίσης ένα API Ρυθμίσεων για τη δημιουργία ενός διαχειριστή GUI για διαλόγους επιλογών. Εκτός από αυτό, μας επιτρέπει να προσθέσουμε προσαρμοσμένα στοιχεία στο μενού διαχειριστή, έτσι ώστε το plugin να έχει τη δική του σελίδα ρυθμίσεων. Τέλος, το WordPress φροντίζει για την ασφάλεια του plugin και παρέχει ένα σύνολο δυνατοτήτων και μεθόδων καθαρισμού για την ασφαλή διαχείριση της εισόδου του χρήστη.

Ας ρίξουμε μια λεπτομερή ματιά σε κάθε μέρος.

API επιλογών

ο API επιλογών είναι ένας τυποποιημένος τρόπος αποθήκευσης προσαρμοσμένων δεδομένων στη βάση δεδομένων. Όλα τα δεδομένα αποθηκεύονται στον πίνακα wp_options κάτω από ένα δεδομένο προσαρμοσμένο όνομα και μπορούν να αποκτήσουν πρόσβαση σε αυτόν από κάπου στον κώδικα. Οι πιο σημαντικές λειτουργίες του API είναι:

Η συνάρτηση get_option απλά εξάγει από τη βάση δεδομένων οποιαδήποτε πληροφορία αποθηκεύεται κάτω από ένα δεδομένο όνομα και την επιστρέφει. Η συνάρτηση update_option παίρνει ένα όνομα επιλογής και την αξία του και ενημερώνει την αντίστοιχη καταχώρηση στη βάση δεδομένων. Εάν δεν υπάρχει τέτοια καταχώρηση, θα δημιουργηθεί αυτόματα. Και οι δύο λειτουργίες μπορούν να λειτουργούν με συστοιχίες καθώς και μεμονωμένες τιμές. Αυτό σημαίνει ότι μπορείτε να αποθηκεύσετε δεδομένα συστοιχιών κάτω από ένα μόνο όνομα στη βάση δεδομένων και το API θα χειριστεί τις δράσεις σειριοποίησης και μεταλλοποίησης για εσάς. Αυτή είναι μια συνιστώμενη πρακτική για τα plugins: Αποθηκεύστε όλες τις επιλογές plugin ως πίνακα κάτω από ένα μόνο όνομα.

Επιλογές πρόσθετου "

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

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

Ως παράμετρος $ parent_slug πρέπει να χρησιμοποιήσετε το αναγνωριστικό της σελίδας ανώτατου επιπέδου - στην περίπτωση μιας προσαρμοσμένης σελίδας ανώτερου επιπέδου, είναι η τιμή που δώσατε ως $ menu_slug κατά την εγγραφή. Εάν δεν χρειάζεστε αρκετές σελίδες, μπορείτε να δημιουργήσετε μια ενιαία σελίδα ρυθμίσεων κάτω από μία από τις υπάρχουσες ενότητες ανώτερου επιπέδου - συνήθως κάτω από τις "Ρυθμίσεις" (οι επιλογές-general.php θα πρέπει να χρησιμοποιούνται ως $ parent_slug). Εναλλακτικά, υπάρχουν λειτουργίες συντόμευσης για την προσθήκη υποσελίδων κάτω από ορισμένα στοιχεία του μενού διαχείρισης, στην περίπτωση των "Ρυθμίσεων" είναι add_options_page () .

API ρυθμίσεων

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

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

Αφού καταγράψουμε τις επιλογές και τα αντίστοιχα πεδία, πρέπει να τα εμφανίσουμε στη σελίδα ρυθμίσεων - οι ακόλουθες λειτουργίες πρέπει να καλούνται μέσα στο

ετικέτα:

Η συνάρτηση settings_fields φροντίζει για τα υποχρεωτικά κρυμμένα πεδία για να λειτουργήσει ο εγγενής μηχανισμός επιλογών WordPress. Οι παράμετροι do_settings_sections εκτελούν πράγματι καταχωρημένα τμήματα και πεδία.

Σκέψεις ασφαλείας

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

Ένα άλλο σημείο ανησυχίας είναι οι άδειες των χρηστών. Το WordPress έχει ενσωματωμένο μηχανισμό που ελέγχει τους ρόλους και τις δυνατότητες των χρηστών που αποκλείει την πρόσβαση σε ορισμένες περιοχές διαχείρισης για χρήστες με ανεπαρκή δικαιώματα. Μόνο οι διαχειριστές επιτρέπονται παντού. Όταν δημιουργείτε σελίδες επιλογών, πρέπει να τους αντιστοιχίσετε τις σωστές δυνατότητες (συνήθως είναι 'manage_options') και να μην επιτρέπετε σε χρήστες με χαμηλά προνόμια να έχουν πρόσβαση στη σελίδα (για περισσότερες πληροφορίες σχετικά με τους ρόλους και τις δυνατότητες του WordPress, ανατρέξτε στο Κώδιξ ).

Βάλτε τα πάντα στη δουλειά

Ας δούμε ολόκληρο το σενάριο σε δράση.

Θα συνεχίσουμε να αναπτύσσουμε το παράδειγμα "Hello World" (ξεκίνησε στα προηγούμενα τμήματα της σειράς) που εμφανίζει τις πληροφορίες του συγγραφέα του επισκέπτη κάτω από μια ανάρτηση με τη βοήθεια της προσαρμοσμένης ταξινόμησης.

Η σήμανση μπλοκ του συγγραφέα ήταν προηγουμένως κωδικοποιημένη στο plugin. Τώρα θα δώσουμε σε ένα χρήστη τη δυνατότητα να καθορίσει ένα πρότυπο για τη συγκεκριμένη σήμανση χρησιμοποιώντας εντολείς θέσης για συγκεκριμένα δεδομένα συγγραφέα (όνομα, διεύθυνση URL και περιγραφή). Το plugin μας έχει ήδη δύο αρχεία PHP που μπορούν να συμπεριληφθούν: core.php (που περιέχει τον κύριο κώδικα) και admin.php (που περιέχει κώδικα που σχετίζεται με το admin).

Τι αλλαγές πρέπει να κάνουμε;

1. Δημιουργία σελίδας επιλογών plugin (στο admin.php)

/* register menu item */function msp_helloworld_admin_menu_setup(){add_submenu_page('options-general.php','Helloworld Settings','Helloworld','manage_options','msp_helloworld','msp_helloworld_admin_page_screen');}add_action('admin_menu', 'msp_helloworld_admin_menu_setup'); //menu setup/* display page content */function msp_helloworld_admin_page_screen() {global $submenu;// access page settings$page_data = array();foreach($submenu['options-general.php'] as $i => $menu_item) {if($submenu['options-general.php'][$i][2] == 'msp_helloworld')$page_data = $submenu['options-general.php'][$i];}// output?>

', return $ actions'} add_filter ('plugin_action_links', 'msp_helloworld_settings_link', 2, 2).

Σε αυτό το απόσπασμα, το msp_helloworld_admin_menu_setup δημιουργεί μια υποσελίδα κάτω από το μενού "Ρυθμίσεις" (θα πρέπει να εκτελεστεί στον άξονα δράσης "admin_menu" για να λειτουργήσει σωστά). Κατόπιν εξάγουμε τη φόρμα ρυθμίσεων με το msp_helloworld_admin_page_screen. Χρησιμοποιεί τις λειτουργίες API Ρυθμίσεων για πεδία και προκαθορισμένες λειτουργίες του WordPress για άλλα στοιχεία της διασύνδεσης (όπως το κουμπί υποβολής). Σημειώστε το χαρακτηριστικό δράσης του

ετικέτα: θα πρέπει να υποδεικνύει "options.php" για να επεξεργάζεται σωστά τις επιλογές. Τέλος, το φίλτρο msp_helloworld_settings_link δημιουργεί έναν σύνδεσμο συντόμευσης στη σελίδα επιλογών στην οθόνη διαχείρισης plugin.

2. Καταχωρήστε τις επιλογές plugin με το σύστημα και δημιουργήστε πεδία και κανόνες για αυτά

/* register settings */function msp_helloworld_settings_init(){register_setting('msp_helloworld_options','msp_helloworld_options','msp_helloworld_options_validate');add_settings_section('msp_helloworld_authorbox','Author's box','msp_helloworld_authorbox_desc','msp_helloworld');add_settings_field('msp_helloworld_authorbox_template','Template','msp_helloworld_authorbox_field','msp_helloworld','msp_helloworld_authorbox');}add_action('admin_init', 'msp_helloworld_settings_init');/* validate input */function msp_helloworld_options_validate($input){global $allowedposttags, $allowedrichhtml;if(isset($input['authorbox_template']))$input['authorbox_template'] = wp_kses_post($input['authorbox_template']);return $input;}/* description text */function msp_helloworld_authorbox_desc(){echo "

Enter the template markup for author box using placeholders: [gauthor_name], [gauthor_url], [gauthor_desc] for name, URL and description of author correspondingly.

";}/* filed output */function msp_helloworld_authorbox_field() {$options = get_option('msp_helloworld_options');$authorbox = (isset($options['authorbox_template'])) ? $options['authorbox_template'] : '';$authorbox = esc_textarea($authorbox); //sanitise output?>

Θα πρέπει να επισημάνω ότι όλες οι επιλογές plugin θα πρέπει να αποθηκεύονται ως πίνακας. Παρά το γεγονός ότι διαθέτουμε μόνο μια επιλογή (authorbox_template), την συμπεριλαμβάνουμε σε έναν πίνακα και το αντίστοιχο πεδίο στην ενότητα για σκοπούς επίδειξης. Η λειτουργία εγγραφής msp_helloworld_settings_init πρέπει να εκτελεστεί στο άγκιστρο 'admin_init'. Η λειτουργία msp_helloworld_options_validate φροντίζει την είσοδο του χρήστη, καθαρίζοντάς τον με τον εγγενή wp_kses_post φίλτρο που βασίζεται στη βιβλιοθήκη KSES. Η συνάρτηση msp_helloworld_authorbox_desc δημιουργεί μια περιγραφή για την ενότητα της φόρμας και το msp_helloworld_authorbox_field εξάγει μια textarea για να χειριστεί την εισαγόμενη σήμανση. Σημειώστε ότι αναθέτουμε σε αυτές τις κλάσεις CSS "κώδικα μεγάλου κειμένου", ώστε να εφαρμόζεται το ενσωματωμένο styling admin.

Όλα αυτά παράγουν την ακόλουθη οθόνη στον πίνακα διαχείρισης του WordPress.

3. Τροποποιήστε τη λειτουργία που εξάγει το πλαίσιο συγγραφέα (στο core.php)

Το κάνουμε αυτό ώστε να πάρει το πρότυπο από τη βάση δεδομένων και να αντικαταστήσει τα δεδομένα των παραληπτών ([gauthor_name], [gauthor_url], [gauthor_desc]) με τις αντίστοιχες τιμές.

/* Create author's box markup */function msp_helloworld_author_block(){global $post;$author_terms = wp_get_object_terms($post->ID, 'gauthor');if(empty($author_terms))return;$name = stripslashes($author_terms[0]->name);$url = esc_url(get_term_link($author_terms[0]));$desc = wp_filter_post_kses($author_terms[0]->description);//get template from option$options = get_option('msp_helloworld_options');$out = (isset($options['authorbox_template'])) ? $options['authorbox_template'] : '';$out = str_replace(array('[gauthor_url]', '[gauthor_name]', '[gauthor_desc]'),array($url, $name, $desc),$out);return $out;}

Τέλος, το plugin μας (μετά την εφαρμογή ορισμένων στυλ) παράγει ένα ωραίο πλαίσιο συγγραφέα του φιλοξενούμενου με περιεχόμενο μετά.

συμπέρασμα

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

Τι είδους πρόσθετα θα θέλατε να δείτε διαθέσιμα για το WordPress; Έχετε δημιουργήσει τη δική σας χρησιμοποιώντας αυτή τη σειρά; Ενημερώστε μας στα σχόλια παρακάτω.

Προτεινόμενη χρήση εικόνας εικόνα ενότητας μέσω Shutterstock