WordPress Hooks: Οδηγός για αρχάριους για την προσθήκη των δικών σας γάντζων

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


Θέλετε να κάνετε κάτι μόλις δημοσιευτεί μια ανάρτηση; Θέλετε να τροποποιήσετε τη διάρκεια του αποσπάσματος; Θέλετε να δημιουργήσετε τα δικά σας στατιστικά στοιχεία προβολής σελίδας; Το να βρεις το σωστό γάντζο είναι το μόνο που χρειάζεται να κάνεις.

Αλλά τι γίνεται με το να κάνετε το ίδιο με τα πρόσθετα; Οι γάντζοι δεν προορίζονται μόνο για χρήση στο WordPress, είναι ουσιαστικά ένα σχέδιο σχεδίασης που μπορείτε να εφαρμόσετε στη δική σας εργασία.

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

Γιατί χρειαζόμαστε γάντζους

Για να σας δείξουμε πόσο υπέροχα είναι τα αγκίστρια, ας δούμε ένα παράδειγμα από τον πραγματικό κόσμο: Προηγμένα προσαρμοσμένα πεδία. Αυτή η προσθήκη σας επιτρέπει να προσθέσετε ευέλικτα προσαρμοσμένα πεδία δεδομένων σε αναρτήσεις. μιλάμε για Χάρτες Google, πεδία αριθμών, πολλαπλές επιλογές και πολλά άλλα.

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

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

Εάν το ACF (Advanced Custom Fields) δεν έχει άγκιστρα, αυτό θα ήταν δύσκολο να γίνει, ίσως χρειαστεί να χρησιμοποιήσετε έναν μηχανισμό εκτός του ACF για να αποθηκεύσετε αυτό το πεδίο. Ευτυχώς, καλύπτονται από το acf / save_post δράση. Μπορείτε να χρησιμοποιήσετε αυτήν την ενέργεια για να τροποποιήσετε τα $ _POST δεδομένα προτού αποθηκευτούν – μια τέλεια στιγμή για να μετατρέψετε την τιμή σε Δολάρια.

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

Πώς λειτουργούν εσωτερικά οι γάντζοι

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

Το WordPress χρησιμοποιεί τη συνάρτηση wp_trim_excerpt () εσωτερικά για να δημιουργήσει ένα απόσπασμα. Στο WordPress 4.1 αυτή η λειτουργία ορίζεται στο wp-include / formatting.php, ξεκινώντας από τη γραμμή 2542. Εάν στρέψετε την προσοχή σας στη γραμμή 2560, θα πρέπει να δείτε τα εξής:

$ excerpt_length = apply_filters (‘excerpt_length’, 55);

Αυτό σημαίνει ότι είναι το εξής: Εκτελέστε κάθε συνάρτηση συνδεδεμένη στα άγκιστρα μήκους αποσπάσματος και επιστρέψτε την τελική τιμή. Ας υποθέσουμε ότι χρησιμοποιείτε 3 προσθήκες που τροποποιούν τη διάρκεια του αποσπάσματος, τι συμβαίνει τότε; Ας συγκεντρώσουμε αυτές τις λειτουργίες σε ένα μέρος και ρίξτε μια ματιά:

add_filter (‘excerpt_length’, ‘plugin_a_excerpt_modify’, 20);
plugin_a_excerpt_modify (μήκος $) {
επιστροφή μήκους $ – 10;
}

add_filter (‘excerpt_length’, ‘plugin_b_excerpt_modify’, 32);
plugin_b_excerpt_modify (μήκος $) {
επιστροφή 104;
}

add_filter (‘excerpt_length’, ‘plugin_c_excerpt_modify’, 16);
plugin_c_excerpt_modify (μήκος $) {
επιστροφή 20;
}

Στο τέλος, το μήκος του αποσπάσματος θα είναι 104 λέξεις. Τα φίλτρα εκτελούνται κατά σειρά προτεραιότητας. Επομένως, εκτελείται πρώτα η λειτουργία του plugin C. Εάν δεν είχε συνδεθεί καμία άλλη συνάρτηση, το μήκος θα είναι τώρα 20 λέξεις. Στη συνέχεια, το plugin A ξεκινά και το μήκος γίνεται 10. Τέλος, το plugin B ζυγίζει, κάνοντας το μήκος 104.

Το do_action () χρησιμοποιεί τον ίδιο ακριβώς μηχανισμό, εκτελώντας όλες τις λειτουργίες που συνδέονται με το άγκιστρο που ορίζεται ως η πρώτη παράμετρος.

Σημειώστε ότι αυτό το μοτίβο είναι εντελώς κλειστό, δεν βασίζεται σε ειδικούς ορισμούς. Μπορείτε να χρησιμοποιήσετε το do_action (‘lol_hook’) οπουδήποτε θέλετε, το χειρότερο σενάριο, καμία λειτουργία δεν συνδέεται με το lol_hook. Με άλλα λόγια, έχουμε ήδη την υποδομή για να δημιουργήσουμε τα δικά μας άγκιστρα!

Δημιουργία των δικών μας γάντζων

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

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

$ args = πίνακας (
“post_type” => ‘συνημμένο’,
‘post_status’ => ‘όποιος’,
“παραγγελία” => ‘ημερομηνία’,
“παραγγελία” => «DESC»,
‘posts_per_page’ => 10,
“πεδία” => «αναγνωριστικά»
)
$ images = νέο WP_Query ($ args);
$ gallery = ‘[‘ .gallery ids ="”. implode (‘,’, $ εικόνες). “"”.”] “;
echo do_shortcode ($ γκαλερί);

Σε αυτό το παράδειγμα δημιουργούμε ένα ερώτημα που διασφαλίζει ότι ανακτούμε μόνο εικόνες, ταξινομημένες κατά ημερομηνία και περιορίζονται σε 10 αποτελέσματα. Χρησιμοποιώντας την παράμετρο πεδίων, φρόντισα να επιστραφεί ένας πίνακας αναγνωριστικών. Έφτιαξα στη συνέχεια μια τακτική σύντομη συλλογή WordPress από αυτές τις πληροφορίες.

Υπάρχουν δύο προσεγγίσεις που θα μπορούσατε να ακολουθήσετε για να προσθέσετε άγκιστρα εδώ. Θα μπορούσατε να το προσθέσετε λίγο πριν από τον ορισμό του πίνακα $ args, ως εξής:

$ posts_per_page = apply_filters (‘my_gallery / posts_per_page’, 10);

Σε αυτήν την περίπτωση, θα πρέπει να χρησιμοποιήσετε τη μεταβλητή $ posts_per_page στον πίνακα. Ίσως μια καλύτερη λύση θα ήταν να αφήσουμε ολόκληρο τον πίνακα να τροποποιηθεί. Αυτό θα επέτρεπε σε άλλα πρόσθετα (ή εσείς, στο μέλλον) να προσθέσετε κατηγορία, ετικέτα και άλλους περιορισμούς στις γκαλερί – εδώ είναι ο πλήρης κωδικός:

$ args = πίνακας (
“post_type” => ‘συνημμένο’,
‘post_status’ => ‘όποιος’,
“παραγγελία” => ‘ημερομηνία’,
“παραγγελία” => «DESC»,
‘posts_per_page’ => 10,
“πεδία” => «αναγνωριστικά»
)

$ args = apply_filters (‘my_gallery / query_args’, $ args);

$ images = νέο WP_Query ($ args);
$ gallery = ‘[‘ .gallery ids ="”. implode (‘,’, $ εικόνες). “"”.”] “;
echo do_shortcode ($ γκαλερί);

Αυτό είναι το μόνο που υπάρχει. Άλλα πρόσθετα μπορούν τώρα να χρησιμοποιήσουν το γάντζο my_gallery / query_args για να τροποποιήσουν τη λειτουργικότητα των γκαλερί που δημιουργήθηκαν.

Μια σημείωση για την ονομασία: η κάθετο δεν είναι καθόλου απαραίτητη. Θα μπορούσατε να χρησιμοποιήσετε το “my_plugin_query_args” ή οποιαδήποτε άλλη μορφή θέλετε. Προτιμώ την κάθετο, επειδή δηλώνει με σαφήνεια την προσθήκη που δημιουργεί και τη λειτουργικότητα που παρέχει.

συμπέρασμα

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

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

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

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map