Δεν υπάρχει λόγος να ρωτήσετε γιατί κάποιος θα ήθελε να γράψει ένα plugin για το WordPress. Είναι ένα από τα κύρια χαρακτηριστικά που κάνει το WordPress τόσο ευέλικτο και κατάλληλο για ένα ευρύ φάσμα έργων. Σε το πρώτο μέρος της σειράς μας δημιουργήσαμε τη βάση για ένα plugin WordPress αναγνωρίσιμο από τον πυρήνα. Στη συνέχεια, στο το δεύτερο μέρος μάθαμε πώς να αλλάξουμε την προεπιλεγμένη λειτουργικότητα του πυρήνα. Σήμερα θα εξετάσουμε τις επιλογές του plugin. Αυτή είναι μια από τις πιο συνηθισμένες εργασίες που πρέπει να εκτελέσουν τα πρόσθετα.
Συνήθως θα χρειαστεί να δημιουργήσετε ένα σύνολο παραμέτρων (επιλογές) και να δώσετε στον χρήστη τη δυνατότητα να εκχωρήσει τις κατάλληλες τιμές. Οι τιμές αποθηκεύονται στη βάση δεδομένων και μπορούν να ανακτηθούν κατόπιν αιτήματος. Το plugin συνήθως εκτελεί διαφορετικές ενέργειες με βάση αυτές τις τιμές, για παράδειγμα παράγει διαφορετική έξοδο.
Τι εργαλεία μας δίνει το WordPress για να καταστήσουμε αυτό το σενάριο δυνατό; Μας επιτρέπει να καταχωρίσουμε επιλογές με το σύστημα και να τις ανακτήσουμε με την ανατεθείσα ταυτότητα - το API Options είναι υπεύθυνο γι 'αυτό. Το WordPress παρέχει επίσης ένα API Ρυθμίσεων για τη δημιουργία ενός διαχειριστή GUI για διαλόγους επιλογών. Εκτός από αυτό, μας επιτρέπει να προσθέσουμε προσαρμοσμένα στοιχεία στο μενού διαχειριστή, έτσι ώστε το plugin να έχει τη δική του σελίδα ρυθμίσεων. Τέλος, το WordPress φροντίζει για την ασφάλεια του plugin και παρέχει ένα σύνολο δυνατοτήτων και μεθόδων καθαρισμού για την ασφαλή διαχείριση της εισόδου του χρήστη.
Ας ρίξουμε μια λεπτομερή ματιά σε κάθε μέρος.
ο API επιλογών είναι ένας τυποποιημένος τρόπος αποθήκευσης προσαρμοσμένων δεδομένων στη βάση δεδομένων. Όλα τα δεδομένα αποθηκεύονται στον πίνακα wp_options κάτω από ένα δεδομένο προσαρμοσμένο όνομα και μπορούν να αποκτήσουν πρόσβαση σε αυτόν από κάπου στον κώδικα. Οι πιο σημαντικές λειτουργίες του API είναι:
Η συνάρτηση get_option απλά εξάγει από τη βάση δεδομένων οποιαδήποτε πληροφορία αποθηκεύεται κάτω από ένα δεδομένο όνομα και την επιστρέφει. Η συνάρτηση update_option παίρνει ένα όνομα επιλογής και την αξία του και ενημερώνει την αντίστοιχη καταχώρηση στη βάση δεδομένων. Εάν δεν υπάρχει τέτοια καταχώρηση, θα δημιουργηθεί αυτόματα. Και οι δύο λειτουργίες μπορούν να λειτουργούν με συστοιχίες καθώς και μεμονωμένες τιμές. Αυτό σημαίνει ότι μπορείτε να αποθηκεύσετε δεδομένα συστοιχιών κάτω από ένα μόνο όνομα στη βάση δεδομένων και το API θα χειριστεί τις δράσεις σειριοποίησης και μεταλλοποίησης για εσάς. Αυτή είναι μια συνιστώμενη πρακτική για τα plugins: Αποθηκεύστε όλες τις επιλογές plugin ως πίνακα κάτω από ένα μόνο όνομα.
Μπορείτε να δημιουργήσετε μια σελίδα ρυθμίσεων ή μια ομάδα σελίδων για την προσθήκη σας στο μενού διαχειριστή. Εάν δημιουργείτε μια ομάδα σελίδων, πρέπει πρώτα να προσθέσετε μια σελίδα ανώτατου επιπέδου:
Οι τιμές των παραμέτρων είναι αυτονόητες, αλλά μπορείτε να ανατρέξετε στο πηγή για λεπτομέρειες. Τώρα πρέπει να προσθέσετε εσωτερικές σελίδες μία προς μία με τον ακόλουθο τρόπο:
Ως παράμετρος $ parent_slug πρέπει να χρησιμοποιήσετε το αναγνωριστικό της σελίδας ανώτατου επιπέδου - στην περίπτωση μιας προσαρμοσμένης σελίδας ανώτερου επιπέδου, είναι η τιμή που δώσατε ως $ menu_slug κατά την εγγραφή. Εάν δεν χρειάζεστε αρκετές σελίδες, μπορείτε να δημιουργήσετε μια ενιαία σελίδα ρυθμίσεων κάτω από μία από τις υπάρχουσες ενότητες ανώτερου επιπέδου - συνήθως κάτω από τις "Ρυθμίσεις" (οι επιλογές-general.php θα πρέπει να χρησιμοποιούνται ως $ parent_slug). Εναλλακτικά, υπάρχουν λειτουργίες συντόμευσης για την προσθήκη υποσελίδων κάτω από ορισμένα στοιχεία του μενού διαχείρισης, στην περίπτωση των "Ρυθμίσεων" είναι add_options_page () .
ο API ρυθμίσεων σας επιτρέπει να δημιουργήσετε μια διεπαφή για τη διαχείριση των ρυθμίσεων του plugin. να επισημάνετε μια σελίδα ως σελίδα ρυθμίσεων (για να επεξεργαστείτε την είσοδο αυτόματα) και να εξάγετε τμήματα σε αυτήν τη σελίδα και πεδία μέσα σε κάθε ενότητα για αποδοχή εισόδου χρήστη. Για να επιτευχθεί αυτό, ο πρώτος στόχος σας είναι να καταχωρήσετε τις ρυθμίσεις στο σύστημα και να δημιουργήσετε μια δομή τομέων-τομέων για αυτούς:
Αναφέρομαι στο Κώδιξ για μια λεπτομερή περιγραφή των παραμέτρων, αλλά η λογική είναι αρκετά απλή: καταρχήν, καταχωρούμε το όνομα των επιλογών μας (αν υπάρχουν πολλές επιλογές, θα μπορούσαν να οργανωθούν σε ομάδες). τότε καταχωρούμε το τμήμα (ες) με εσωτερικό αναγνωριστικό και σύνολο πεδίων για κάθε τμήμα. το API μας δίνει τη δυνατότητα να καθορίσουμε προσαρμοσμένες επανάκλησεις για επικύρωση εισόδου και για την εμφάνιση κάθε πεδίου και ενότητας.
Αφού καταγράψουμε τις επιλογές και τα αντίστοιχα πεδία, πρέπει να τα εμφανίσουμε στη σελίδα ρυθμίσεων - οι ακόλουθες λειτουργίες πρέπει να καλούνται μέσα στο
/* 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.
Το κάνουμε αυτό ώστε να πάρει το πρότυπο από τη βάση δεδομένων και να αντικαταστήσει τα δεδομένα των παραληπτών ([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