Άγκιστρα: φίλτρα και ενέργειες. Αναλυτικός οδηγός. Άγκιστρα προετοιμασίας WordPress: Οφέλη και κοινά λάθη

Τι είναι τα άγκιστρα; Με απλά λόγιαΤα Hooks είναι συναρτήσεις του WordPress με τις οποίες μπορείτε να συνδέσετε τις συναρτήσεις σας. Μετάφραση από τα αγγλικά, το hook είναι ένα άγκιστρο, επομένως φαίνεται να είστε συνδεδεμένοι σε μια τυπική λειτουργία. Για παράδειγμα, στη συνάρτηση διαγραφής ανάρτησης, δεσμεύουμε τη δική μας συνάρτηση, η οποία θα λειτουργεί μόνο όταν διαγραφεί η ανάρτηση. Με τη σωστή χρήση των αγκίστρων, μπορείτε να επεκτείνετε πολύ τη βασική λειτουργικότητα του WordPress.

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

Πώς να χρησιμοποιήσετε το άγκιστρο

Τα hook χρησιμοποιούνται είτε σε plugins είτε σε functions.php. Για να καλέσετε ένα άγκιστρο, πρέπει να γράψετε:

Add_action("publish_post", "add_point");

add_point-Το όνομα της συνάρτησης που δημιουργείτε.

Παράδειγμα λειτουργίας γάντζου

Στην περίπτωσή μου, η συνάρτηση λειτουργεί ως εξής:

Ο χρήστης προσθέτει μια καταχώρηση, ενεργοποιείται ένα άγκιστρο που καλεί τη συνάρτηση όπου όλα τα μαγικά συμβαίνουν 🙂 Στη συνάρτηση, δουλεύω με μια τάξη $wpdb-> ενημέρωση, όπου ενημερώνω τον πίνακα με τις βαθμολογίες ενός συγκεκριμένου χρήστη. Στο μάθημα μίλησα για την τάξη $wpdb->insertβάσει των οποίων μπορείτε να κάνετε τη λειτουργία σας χρησιμοποιώντας $wpdb->ενημέρωση,αυτή η τάξη λειτουργεί με παρόμοιο τρόπο.

Δείτε πώς φαίνεται η κατασκευή με χρήση του γάντζου:

Συνάρτηση add_point() ( //Λειτουργία εδώ ) add_action("publish_post", "add_point");

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

Ακολουθεί η συνάρτηση με ενημέρωση βαθμολογιών:

Συνάρτηση add_point() ( καθολική $wpdb; $user_ID = get_current_user_id(); $result = $wpdb->get_results("SELECT points FROM user_points WHERE user = "".$user_ID."""); $update = $result- >points + 10; $wpdb->update("user_points", array("points" => $update,), array("user" => $user_ID), array("%d",), array(" %d")); ) add_action("publish_post", "add_point");

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

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


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

Τι είναι τα άγκιστρα;

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

  • στείλετε ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗστον συγγραφέα μετά τη δημοσίευση του λήμματος·
  • φορτώστε ένα προσαρμοσμένο σενάριο στο υποσέλιδο της σελίδας.
  • προσθέστε οδηγίες πάνω από τη φόρμα σύνδεσης.

Το άγκιστρο "προσαρμογή" ονομάζεται "φίλτρο". Ένα φίλτρο σάς επιτρέπει να αλλάξετε ή να προσαρμόσετε μια τιμή και να την επιστρέψετε σε νέα μορφή. Ορίστε μερικά παραδείγματα:

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

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

Στοιχεία διαδικασίας άγκιστρου

Ας χρησιμοποιήσουμε το άγκιστρο wp_head ως παράδειγμα ενέργειας και το άγκιστρο the_content ως παράδειγμα φίλτρου.

Γάντζος (ουσιαστικό)

Το ίδιο το άγκιστρο είναι μια ένδειξη του πότε και πού συμβαίνει η μαγεία. Φανταστείτε ότι αυτό είναι ένα γάντζο που ένας ορειβάτης έχει οδηγήσει στην επιφάνεια ενός βράχου. Το άγκιστρο έχει μια συγκεκριμένη θέση. Εάν άλλοι ορειβάτες θέλουν να κινηθούν προς αυτή την κατεύθυνση, μπορούν να το χρησιμοποιήσουν.
Τα άγκιστρα ενεργειών καλούνται με τη συνάρτηση do_action:

do_action("wp_head");

Τα άγκιστρα καλούνται με application_filters():

$content=apply_filters("the_content",$content);

Όπως μπορείτε να δείτε, πρέπει να υποκλέψουμε τα δεδομένα από το φίλτρο.

Ενέργειες και φίλτρα

Το επόμενο στοιχείο σε μια διαδικασία αγκίστρου είναι μια ενέργεια ή φίλτρο. Αυτή είναι μια λειτουργία που ορίζετε να κάνει ή να φιλτράρει κάτι. Αυτός είναι ένας ορειβάτης που είναι πρόθυμος να χρησιμοποιήσει οποιοδήποτε άγκιστρο για να ανέβει λίγο ψηλότερα.
Η ενέργεια που ενεργοποιείται στο wp_head είναι noindex() .

functionnoindex()( // Εάν το ιστολόγιο δεν είναι δημόσιο, πείτε στα ρομπότ να περάσουν. if("0"==get_option("blog_public")) wp_no_robots(); )

Το άγκιστρο ελέγχει εάν η ρύθμιση ορατότητας για τις μηχανές αναζήτησης είναι απενεργοποιημένη. Αν ναι, η wp_no_robots() προσθέτει το meta ετικέτα ρομπότυποδεικνύοντας μηχανές αναζήτησηςμην καταχωρήσετε τον ιστότοπο.
Ένα παράδειγμα φίλτρου για το_content είναι το wpautop() . Είναι υπεύθυνος για την αναδίπλωση των παραγράφων στην ετικέτα

Και χρησιμοποιώντας την ετικέτα
για διαλείμματα γραμμής.

functionwpautop($pee,$br=true)( // ... return$pee; )

Σε αντίθεση με μια ενέργεια, μια συνάρτηση φίλτρου απαιτεί τουλάχιστον ένα όρισμα. Πρέπει να επιστραφεί.

Γάντζος (ρήμα)

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

add_action("wp_head","noindex",1);

Η τρίτη παράμετρος είναι η προτεραιότητα. Θα το αναθεωρήσουμε παρακάτω.
Η συμπερίληψη της wpautop() στο the_content γίνεται με αυτήν τη γραμμή:

add_filter("the_content","wpautop");

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

Χρησιμοποιείτε ήδη αυτά τα άγκιστρα

Ακόμα κι αν «απλώς» αλλάξετε το θέμα ή προσθέσετε κώδικα στο αρχείο functions.php, χρησιμοποιείτε ήδη ενέργειες και φίλτρα.

WP_HEAD

Εξετάστε την ενότητα τίτλου του θέματος Twenty Fifteen, που μπορείτε να βρείτε στο αρχείο wp-content/themes/twentyfifteen/header.php.

class="no-js"> "> ">

Μεταξύ ανοίγματος και κλεισίματος ετικετών Δεν έχει αναρτηθεί πολύς κώδικας, αλλά δείτε τον πηγαίο κώδικα της σελίδας σε ένα πρόγραμμα περιήγησης. Εκεί θα δείτε διάφορα meta στοιχεία, συμπεριλαμβανομένης της ετικέτας .<br>Στοιχεία που ενδέχεται να μην υπάρχουν στο αρχείο header.php προστίθενται από τη συνάρτηση wp_head(). Εάν χρησιμοποιείτε ένα περιβάλλον ανάπτυξης, ελέγξτε το περιεχόμενό του.</p> <p>/** * Εκτελέστε την ενέργεια wp_head * * @since 1.2.0 */ functionwp_head()( /** * Εξαγωγή του σεναρίου ή των δεδομένων στην ετικέτα κεφαλής μέσω της διεπαφής. * * @since 1.5.0 */ do_action ("wp_head" );)</p> <p>Το μόνο πράγμα που κάνει η συνάρτηση wp_head() είναι η έξοδος του άγκιστρου wp_head. Αυτό σημαίνει ότι το θέμα μπορεί να χρησιμοποιήσει το do_action('wp_head') αντί για το wp_head () . <br>Αυτό το άγκιστρο χρησιμοποιείται ήδη από τον πυρήνα. Ακολουθούν ορισμένες από τις ενέργειες που συνδέει το WordPress σε αυτό το άγκιστρο από προεπιλογή:</p> <p>add_action("wp_head","_wp_render_title_tag",1); add_action("wp_head","wp_enqueue_scripts",1); add_action("wp_head","feed_links",2); add_action("wp_head","feed_links_extra",3); add_action("wp_head","rsd_link"); add_action("wp_head","wlwmanifest_link"); add_action("wp_head","adjacent_posts_rel_link_wp_head",10,0); add_action("wp_head","locale_stylesheet"); add_action("wp_head","noindex",1); add_action("wp_head","print_emoji_detection_script",7); add_action("wp_head","wp_print_styles",8); add_action("wp_head","wp_print_head_scripts",9); add_action("wp_head","wp_generator"); add_action("wp_head","rel_canonical"); add_action("wp_head","wp_shortlink_wp_head",10,0); add_action("wp_head","wp_site_icon",99);</p> <p>Αυτά περιλαμβάνουν την ενέργεια noindex() και (από το WordPress 4.1) την κλήση _wp_render_title_tag() που δημιουργεί την ετικέτα τίτλου.</p> <h2>Περιεχόμενο</h2> <p>Ένα παράδειγμα άγκιστρου φίλτρου που έχετε χρησιμοποιήσει χωρίς καν να το γνωρίζετε είναι το the_content . <br>Είναι κρυμμένο πίσω από τη συνάρτηση the_content(), η οποία χρησιμοποιείται για την εμφάνιση του περιεχομένου μιας ανάρτησης ή μιας σελίδας. Περιέχει μια κλήση στο άγκιστρο the_content.</p> <p>functionthe_content($more_link_text=null,$strip_teaser=false)( $content=get_the_content($more_link_text,$strip_teaser); // ... $content=apply_filters("the_content",$content); $content=str_replace("] ]> ","]]>",$content); echo$content; )</p> <p>Από προεπιλογή, πολλά φίλτρα είναι ήδη συνδεδεμένα στη συνάρτηση the_content.</p> <p>add_filter("the_content","wptexturize"); add_filter("the_content","convert_smilies"); add_filter("the_content","convert_chars"); add_filter("the_content","wpautop"); add_filter("the_content","shortcode_unauto"); add_filter("the_content","prepend_attachment");</p> <p>Αυτά τα φίλτρα είναι υπεύθυνα για τη μορφή και τον αριθμό των <a href="https://comuedu.ru/el/different/how-to-use-fax-detailed-instructions-delete-the-phonebook.html">ειδικοί χαρακτήρες</a>στο κείμενο. Χρησιμοποιούνται επίσης ευρέως από πρόσθετα για την προσάρτηση στοιχείων όπως εικονίδια. <a href="https://comuedu.ru/el/android/vseti-by-socialnaya-set-belarusi-moya-stranica-pervyi-reiting-socialnyh.html">κοινωνικά δίκτυα</a>ή σχετικές εγγραφές.</p> <h2>The_content Μαθήματα</h2> <p>Ακολουθούν δύο παραδείγματα για το πώς η κακή χρήση ενός γάντζου προκαλεί την αποτυχία μιας συνάρτησης. <br>Το σώμα της συνάρτησης the_content() περιέχει επίσης μια κλήση στο get_the_content() . Έχω δει το δεύτερο να χρησιμοποιείται στη θέση του πρώτου σε πολλά νήματα. Αλλά με αυτόν τον τρόπο, το ίδιο το άγκιστρο απενεργοποιείται και πολλές λειτουργίες δεν θα λειτουργήσουν. <br>Εάν κολλάτε στο the_content , έχετε υπόψη σας ότι χρησιμοποιείται όχι μόνο σε σελίδες περιεχομένου, αλλά και σε σελίδες λιστών. Για παράδειγμα, στα αρχεία, καθώς και στην κεντρική σελίδα.</p> <h2>Παράμετροι στη διαδικασία του γάντζου</h2> <p>Οι κύριες παράμετροι που χρειάζονται είναι το όνομα του γάντζου, το όνομα της συνάρτησης, η προτεραιότητα και τα ορίσματα που του μεταβιβάζονται. <br>Δείτε πώς φαίνεται η κλήση add_filter:</p> <p>add_filter($tag,$function,$priority,$accepted_args);</p> <h2>Ονόματα αγκίστρων ($tag)</h2> <p>Δεν θα μπορείτε να κάνετε τίποτα με ονόματα αγκίστρων που χρησιμοποιούνται στον πυρήνα, τις προσθήκες ή τα θέματα του WordPress. Αλλά όταν ορίζετε σωστά ονόματα, πρέπει να τηρείτε διάφορες αρχές. <br>Το όνομα της ενέργειας πρέπει να περιλαμβάνει την τοποθεσία και το φίλτρο πρέπει να περιλαμβάνει την τοποθεσία και την τιμή που πρόκειται να αλλάξει. <br>Παραδείγματα ενεργειών είναι οι wp_head και wp_footer , οι οποίες ονομάζονται από την τοποθεσία τους. Συχνά χρησιμοποιούνται επίσης προθέματα ή επιθήματα. Για παράδειγμα: πριν , προ , αρχή , μετά και τέλος .</p> <p>Η συνάρτηση wp_delete_post(), η οποία είναι υπεύθυνη για τη διαγραφή μιας ανάρτησης, περιλαμβάνει τα ακόλουθα άγκιστρα:</p> <ul><li>before_delete_post;</li> <li>delete_post;</li> <li>deleted_post;</li> <li>after_delete_post.</li> </ul><h2>Προθέματα ονομάτων γάντζου</h2> <p>Εκτός από τη θέση και την τιμή, πρέπει να ορίσετε το πρόθεμα άγκιστρου του προθέματος. Για παράδειγμα:</p> <ul><li>wpseo_ από το Yoast SEO;</li> <li>genesis_ από το πλαίσιο Genesis.</li> <li>advanced_ads_ από την προσθήκη Advanced Ads.</li> </ul><p>Αυτό αποτρέπει τις διενέξεις με άγκιστρα σε άλλα πρόσθετα ή επιφάνειες.</p> <h2>Ονόματα δυναμικών γάντζων</h2> <p>Ας υποθέσουμε ότι μια προσθήκη έχει πολλές επιλογές και θέλετε οι άλλοι προγραμματιστές να μπορούν να φιλτράρουν για καθεμία από αυτές. Για να το κάνετε αυτό, πρέπει να καλέσετε την application_filters() για κάθε παράμετρο. Μπορείτε επίσης να χρησιμοποιήσετε ένα δυναμικό όνομα άγκιστρου, όπως κάνει το WordPress στη συνάρτηση get_options().</p> <p>Αυτή η λειτουργία περιλαμβάνει τα ακόλουθα άγκιστρα:</p> <ul><li>«pre_option_» . $επιλογή;</li> <li>«default_option_» . $επιλογή;</li> <li>'option_' . $επιλογή.</li> </ul><p>Γνωρίζοντας αυτό, μπορείτε να συνδέσετε το option_blogname ή το option_blogdescription για να αλλάξετε δυναμικά τον τίτλο ή την περιγραφή του ιστολογίου.</p> <h2>μαγικά "όλα"</h2> <p>Όταν καλείτε την add_action() και την add_filter(), μια ειδική ετικέτα μπορεί να χρησιμοποιηθεί ως όνομα αγκίστρου. Εξαιτίας της οποίας η σχετική συνάρτηση θα χρησιμοποιηθεί για κάθε άγκιστρο.</p> <h2>Ονόματα συναρτήσεων</h2> <p>Όταν καλείτε μια απλή συνάρτηση, προσθέστε ένα πρόθεμα. Αυτό θα αποτρέψει τις διενέξεις με άλλες βοηθητικές λειτουργίες που το προσδιορίζουν. <br>Στα φόρουμ, μπορείτε να δείτε ονόματα συναρτήσεων που ξεκινούν με my_ . Αλλάξτε αυτό το πρόθεμα στο δικό σας.</p> <p>add_filter("the_content","bestpluginever_capitalize_all_words");</p> <p>Είναι επίσης δυνατή η σύνδεση μιας στατικής συνάρτησης σε μια κλάση:</p> <p>add_filter("the_content",array("bestpluginever","capitalize_all_words"));</p> <p>Η κλήση του σε μια παρουσία αυτής της κλάσης θα μοιάζει με αυτό:</p> <p>add_filter("the_content",array($bestpluginever,"capitalize_all_words"));</p> <p>Είναι επίσης δυνατό να καλέσετε μια μέθοδο σε μια παρουσία της ίδιας κλάσης, για παράδειγμα:</p> <p>add_filter("the_content",array($this,"capitalize_all_words"));</p> <p>Βεβαιωθείτε επίσης ότι οι λειτουργίες είναι δημόσιες.</p> <h2>Χρήση προεπιλεγμένων συναρτήσεων PHP</h2> <p>V <a href="https://comuedu.ru/el/apple/vibraciya-vibro-na-iphone-kak-otklyuchat-ili-vklyuchat-v-opredelennyh-sluchayah-kak.html">ορισμένες περιπτώσεις</a>δεν χρειάζεται να δημιουργήσετε τη δική σας λειτουργία. Αυτή η διαδικασία αγκίστρου γράφει κεφαλαία κάθε πρώτο γράμμα του τίτλου της ανάρτησης:</p> <p>functionbestpluginever_capitalize_title($title)( returnucwords($title); ) add_filter("the_title","bestpluginever_capitalize_title");</p> <p>Δεδομένου ότι η ucwords() είναι μια τυπική συνάρτηση PHP που δέχεται και επιστρέφει μια τιμή, μπορεί να μειωθεί σε μία γραμμή:</p> <p>add_filter("the_title","ucwords");</p> <h2>προτεραιότητες</h2> <p>Η τρίτη παράμετρος στα add_action() και add_filter() είναι η προτεραιότητα. Ορίζει τη σειρά με την οποία καλούνται οι συναρτήσεις που σχετίζονται με το άγκιστρο. <br>Αυτή η παράμετρος είναι προαιρετική και ορίζεται από προεπιλογή σε 10 εάν δεν ορίζεται ρητά. Πολλαπλές συναρτήσεις με την ίδια προτεραιότητα θα κληθούν με τη σειρά που καταχωρήθηκαν στο άγκιστρο. <br>Η προσθήκη Advanced Ads χρησιμοποιεί the_content κατά την εισαγωγή διαφημίσεων πριν ή μετά το περιεχόμενο. Η τρίτη του παράμετρος καθορίζει αν θα εισαχθεί πρώτα μια διαφήμιση ή άλλο περιεχόμενο. Για να αποφύγω τις κλήσεις για υποστήριξη σχετικά με τη "λάθος" σειρά στοιχείων, έδωσα στους χρήστες τη δυνατότητα να επιλέξουν ως επιλογή την προτεραιότητα φίλτρου.</p> <h2>Έλεγχος εάν μια ενέργεια έχει ολοκληρωθεί</h2> <p>Για να ελέγξετε εάν έχει πραγματοποιηθεί μια συγκεκριμένη ενέργεια, μπορεί να χρησιμοποιηθεί το did_action(). <br>Η συνάρτηση _wp_render_title_tag έχει προστεθεί στο wp_head . Αυτό είναι ένα παράδειγμα του τρόπου με τον οποίο ο πυρήνας του WordPress ελέγχει ότι η ετικέτα τίτλου δημιουργείται στην πραγματικότητα μόνο εδώ.</p> <p>function_wp_render_title_tag()( if(!current_theme_supports("title-tag"))( return; ) // Αυτό μπορεί να λειτουργήσει μόνο μέσα στο wp_head if(!did_action("wp_head")&&!doing_action("wp_head"))( return; ) ηχώ" <title>".wp_title("|",false,"right")." n";)

Το did_action($hook) επιστρέφει πληροφορίες σχετικά με το πόσες φορές έχει εκτελεστεί η ενέργεια, συμπεριλαμβανομένης της τρέχουσας κλήσης. Η συνάρτηση θα επιστρέψει 1 εάν η _wp_render_title_tag() εκτελείται στο wp_head . Το do_action('wp_head') ελέγχει αν βρισκόμαστε αυτήν τη στιγμή στην ενέργεια wp_head. Στην πραγματικότητα, ο παραπάνω κωδικός είναι διπλός έλεγχος. Εξαιτίας αυτού, θα αφαιρεθεί από το WordPress 4.4.0.
Η συνάρτηση do_action() ελέγχει εάν μια ενέργεια πραγματοποιείται πραγματικά.

Έλεγχος χρήσης φίλτρου

Δεν υπάρχουν ψευδώνυμα για τα φίλτρα did_action() και do_action(). Θα πρέπει να χρησιμοποιήσετε το has_filter ($hook, $function). Όταν έχει καθοριστεί μόνο το $hook, το true θα επιστραφεί εάν έχει καταχωρηθεί κάποια συνάρτηση για το άγκιστρο. ψευδής αλλιώς.
Εάν περαστεί επίσης μια συνάρτηση $, τότε η προτεραιότητα αυτής της συνάρτησης θα επιστραφεί ή θα γίνει ψευδής εάν αυτή η συνάρτηση δεν είναι συνδεδεμένη.
Όταν προσθέτετε διαφημίσεις μετά από μια συγκεκριμένη παράγραφο, η προσθήκη Advanced Ads πρέπει να διασφαλίζει ότι η wpautop() καλείται πριν εφαρμοστεί η λειτουργία προσαρμοσμένου φίλτρου.

$wpautop_priority=has_filter("the_content","wpautop"); if($wpautop_priority&&$advads_content_injection_priority()<$wpautop_priority){ $content=wpautop($content); }

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

Επιχειρήματα

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

do_action("delete_term",$term,$tt_id,$taxonomy,$deleted_term);

Όταν χρησιμοποιείτε τη συνάρτηση add_action() ή add_filter(), η τέταρτη παράμετρος είναι ο αριθμός των ορισμάτων που αναμένει η δράση ή η συνάρτηση φίλτρου.
Στην περίπτωσή μας, η συνάρτηση hook μπορεί να χρησιμοποιήσει αυτά τα τέσσερα ορίσματα. Αλλά αυτό είναι προαιρετικό. Όπως αποδεικνύεται από τη σχέση που εφαρμόζεται στον πυρήνα:

add_action("delete_term","_wp_delete_tax_menu_item",10,3);

Η ενέργεια χρησιμοποιεί μόνο τα τρία πρώτα ορίσματα, όχι το $deleted_term .

function_wp_delete_tax_menu_item($object_id=0,$tt_id,$taxonomy)( // ... )

Δυσκολίες με τον αριθμό των επιχειρημάτων

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

Καταργήστε ενέργειες και φίλτρα

Η αφαίρεση μιας ενέργειας ή φίλτρου από ένα άγκιστρο δεν είναι ασυνήθιστη. Ένα δημοφιλές παράδειγμα ήταν η αφαίρεση emoji από το WordPress 4.2.
Ολόκληρη η προσθήκη Απενεργοποίηση Emojis μπορεί να συνοψιστεί στον παρακάτω κώδικα:

functiondisable_emojis()( remove_action("wp_head","print_emoji_detection_script",7); remove_action("admin_print_scripts","print_emoji_detection_script"); remove_action("wp_print_styles","print_emoji_styles"); remove_action_print"styles"admin_min. remove_filter("the_content_feed","wp_staticize_emoji"); remove_filter("comment_text_rss","wp_staticize_emoji"); remove_filter("wp_mail","wp_staticize_emoji_for_email"); ) add_action("init","disable);

Υπάρχουν επίσης πρόσθετα που απενεργοποιούν τη λειτουργία wpautop(). Αλλά αυτό μπορεί να γίνει με μία μόνο γραμμή κώδικα στο αρχείο functions.php.

remove_filter("the_content","wpautop");

Οι συναρτήσεις remove_action() και remove_filter() λαμβάνουν τρία ορίσματα:

  • Λειτουργία;
  • Προτεραιότητα.

Πρέπει όλα να ταιριάζουν με τις τιμές από add_action() και add_filter() . Η δυσκολία είναι ότι το άγκιστρο θα αφαιρεθεί μόνο εάν έχει ήδη προστεθεί.

Πώς να βρείτε ένα γάντζο;

Για να βρείτε ένα άγκιστρο, πρέπει απλώς να ξέρετε τι θέλετε να αλλάξετε ή να προσθέσετε. Για να ξεκινήσετε, μπορείτε απλώς να εξετάσετε τις συναρτήσεις που χρησιμοποιούνται ήδη στον τρέχοντα κώδικα.
Ένας άλλος πόρος που μπορείτε να χρησιμοποιήσετε είναι η σελίδα Plugin API. Παραθέτει σημαντικά χαρακτηριστικά και άλλες χρήσιμες πληροφορίες.

Άγκιστρα εντοπισμού σφαλμάτων

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

Χρήση error_log()

Για τον εντοπισμό σφαλμάτων φίλτρου, προτιμώ να χρησιμοποιήσω το error_log() σε συνδυασμό με το DEBUG_LOG. Η έξοδος εγγράφεται στο αρχείο debug.log, αλλά δεν εμφανίζεται μέσω της διεπαφής.

functionexample_content_filter($content)( $option=get_option("add_haha"); error_log($option); if($option===true)( $content.="HAHA
".$content; ) return$content; ) add_filter("the_content","example_content_filter");

Στο παραπάνω σενάριο, προσθέτω τη συμβολοσειρά HAHA στο περιεχόμενο. Αλλά μόνο εάν η παράμετρος επιστρέψει true. Εάν αυτό δεν λειτουργεί, μπορείτε να χρησιμοποιήσετε το error_log(επιλογή $) .

Χρησιμοποιώντας το HOOK API

Ένας άλλος τρόπος για να διορθώσετε τα άγκιστρα είναι να χρησιμοποιήσετε τις λειτουργίες που αναφέρονται παραπάνω. Για παράδειγμα, doing_action() ή did_action() .
Μπορείτε επίσης να προσθέσετε το current_filter() σε αυτήν τη λίστα. Μπορείτε να το χρησιμοποιήσετε για να εμφανίσετε το όνομα του τρέχοντος γάντζου:

functionmy_filter()( echocurrent_filter();// "the_content" ) add_filter("the_content","my_filter");

Αν θέλετε να δείτε πού χρησιμοποιείται στον πυρήνα, ρίξτε μια ματιά στο capital_P_dangit()

Ενεργοποιείται πριν συμπεριληφθεί ένα επιλεγμένο αρχείο προτύπου θέματος, για παράδειγμα: single.php , page.php , search.php , 404.php , κ.λπ. Αυτό το φίλτρο χρησιμοποιείται για την αλλαγή της διαδρομής σε ένα τέτοιο αρχείο.

Το φίλτρο ενεργοποιείται μετά το συμβάν template_redirect και αφού το WordPress παραλάβει ένα αρχείο για να το χρησιμοποιήσει ως αρχείο προτύπου. Για κάθε τύπο σελίδας, το αρχείο είναι διαφορετικό: ανατρέξτε στην ενότητα Ιεραρχία αρχείου θέματος. Για παράδειγμα, πήγαμε σε μια μόνιμη σελίδα, το WordPress επιλέγει ποιο αρχείο προτύπου πρέπει να εμφανίζεται - αυτό είναι το αρχείο page.php: home/site.ru/wp-content/themes/mytheme/page.php . Με αυτό το φίλτρο, μπορείτε να αλλάξετε τη διαδρομή ενός τέτοιου αρχείου.

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

Χρήση

add_filter("template_include", "filter_function_name_11"); συνάρτηση filter_function_name_11($template) ( // Filter... return $template; ) $template (γραμμή)Πλήρης διαδρομή προς το αρχείο που θα συμπεριληφθεί ως πρότυπο. Π.χ.: home/wptest.ru/wp-content/themes/publisher/page.php.

Παραδείγματα

#1 Αρχείο στον κατάλογο θεμάτων

Ένα μόνιμο πρότυπο σελίδας μπορεί να οριστεί δημιουργώντας ένα αρχείο στον κατάλογο θεμάτων και προσδιορίζοντας ένα σχόλιο PHP στην αρχή του αρχείου:

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

#2. Αρχείο θέματος με ακριβές όνομα

Ή δημιουργήστε ένα αρχείο page-portfolio.php στο θέμα σας. Σε αυτήν την περίπτωση, η ετικέτα σελίδας πρέπει να είναι ίση με "portfolio".

#3. φίλτρο template_include

Και ο τρίτος τρόπος για να δημιουργήσετε ένα ξεχωριστό αρχείο προτύπου για τη σελίδα ετικέτας χαρτοφυλακίου είναι να χρησιμοποιήσετε το φίλτρο template_include:

Add_filter("template_include", "portfolio_page_template", 99); συνάρτηση portfolio_page_template($template) ( if(is_page("portfolio"))( if ($new_template = locate_template(array("portfolio-page-template.php"))) $template = $new_template ; ) return $template; )

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

#4 Συμπερίληψη συναρτήσεων PHP ως αρχείου προτύπου

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

επί κεφαλής

κάποιο κείμενο

Πρέπει να ξέρω!

Τεχνικά αυτή δεν είναι η σωστή λύση, αλλά λειτουργεί! Σε αυτήν την περίπτωση, το φίλτρο χρησιμοποιείται ως συμβάν. Και επειδή αυτό το φίλτρο είναι το τελευταίο που καλείται μεταξύ των φίλτρων που δεν σχετίζονται με το πρότυπο, τη στιγμή της κλήσης του, μπορείτε να εμφανίσετε τον κωδικό προτύπου που χρειαζόμαστε στην οθόνη ...

#5 Πώς να μάθετε ποιο αρχείο προτύπου χρησιμοποιείται αυτήν τη στιγμή

Για να το κάνετε αυτό, δείτε τι μεταβιβάζεται στο φίλτρο template_include:

## Ποιο πρότυπο χρησιμοποιείται αυτήν τη στιγμή add_filter("template_include", "echo_cur_tplfile", 99); συνάρτηση echo_cur_tplfile($template)(echo " ".wp_basename($template) .""; επιστροφή $template;)

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

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

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

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

Τι είναι τα άγκιστρα;

Πριν εξετάσουμε τα άγκιστρα του WordPress, πρέπει να κατανοήσουμε την αρχιτεκτονική ανάπτυξης που βασίζεται σε συμβάντα.

Εάν έχετε εργαστεί με προϋπάρχοντα άγκιστρα WordPress, ή ανάπτυξη web front-end ή JavaScript, τότε πιθανότατα είστε εξοικειωμένοι με την έννοια, ακόμα κι αν δεν ξέρατε ότι είχε επίσημο όνομα.

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

Εάν μόλις ξεκινάτε με τα πρότυπα έργων ή την ανάπτυξη, αυτό μπορεί να φαίνεται τρομακτικό, αλλά είναι καλύτερο να το σκεφτείτε ως εξής:

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

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

Χρήση JavaScript

Φανταστείτε ότι εργάζεστε στον τομέα της ανάπτυξης front-end. Έχετε ένα κουμπί με ένα χαρακτηριστικό ID του command-button , και όταν ο χρήστης κάνει κλικ σε αυτό, θα πρέπει να ανοίξει ένα πλαίσιο διαλόγου.

Με το jQuery, μπορείτε να εφαρμόσετε αυτήν τη λειτουργία ως εξής:

(function($) ( "use strict"; // jQuery's DOM-ready event-handler $(function() ( /** * Ακρόαση για το συμβάν "κλικ" στο κουμπί που προσδιορίζεται * με το κουμπί "command-button " Χαρακτηριστικό ID. * * Όταν ο χρήστης κάνει κλικ σε αυτό, εμφανίστε ένα παράθυρο διαλόγου ειδοποίησης. */ $("#command-button").bind("click", function(evt) ( alert("Κάνατε κλικ στο κουμπί." ); )); )); )) (jQuery);

Τα σχόλια στον κώδικα εξηγούν πώς λειτουργεί. Εν ολίγοις, το πρόγραμμα περιήγησης αναπαράγει ένα συμβάν όταν ο χρήστης κάνει κλικ στο κουμπί. Όταν συμβεί αυτό, ο κώδικάς μας ακούει για συμβάντα και στη συνέχεια αποκρίνεται εμφανίζοντας ένα πλαίσιο διαλόγου.

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

Χρήση WordPress

Η εφαρμογή αυτού του μοτίβου ποικίλλει ανάλογα με τη γλώσσα προγραμματισμού ή το παράδειγμα. Αυτό συχνά εξαρτάται από το API που παρέχει η πλατφόρμα ή η εφαρμογή.

Στο WordPress, η καταχώρηση προσαρμοσμένου κώδικα που ενεργοποιεί συμβάντα είναι λίγο διαφορετική. Για παράδειγμα, ας υποθέσουμε ότι εργάζεστε σε μια σελίδα διαχειριστή στο WordPress και θέλετε να προσθέσετε ένα νέο στοιχείο υπομενού στο μενού Ρυθμίσεις. Ας το ονομάσουμε Tuts+ Options.

Για να γίνει αυτό, προσθέτουμε τον ακόλουθο κώδικα στο αρχείο functions.php ή σε ένα πρόσθετο ή σε οποιοδήποτε είδος έργου με το οποίο εργαζόμαστε:

Μπορείτε να μεταβείτε στον Codex για να μάθετε περισσότερα για τα άγκιστρα. admin_menuκαι χαρακτηριστικά add_submenu_page.

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

Αυτά είναι δύο παραδείγματα εφαρμογής και χρήσης του προτύπου ανάπτυξης που βασίζεται σε συμβάντα.

Κατανόηση των ενεργειών του WordPress

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

Ρύθμιση του αρχείου μας

Για τον κώδικα σε αυτό το σεμινάριο, θα χρησιμοποιήσουμε το θέμα Είκοσι Δεκαέξιπαρέχεται από το WordPress.

Δημιουργήστε ένα αρχείο που ονομάζεται tutsplus-actions.php στη ρίζα του καταλόγου θεμάτων σας. Στη συνέχεια, στο functions.php προσθέστε τις ακόλουθες γραμμές κώδικα:

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

Ένας σύντομος ορισμός των ενεργειών

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

Εν ολίγοις, τα action hook λειτουργούν με λειτουργικότητα και τα φίλτρα με πληροφορίες.

Αφού μάθετε περισσότερα για τα άγκιστρα δράσης και φίλτρου, μπορείτε να βρείτε άλλα, που συλλογικά ονομάζονται άγκιστρα.

Αν και είναι τεχνικά σωστό, είναι καλύτερο να ορίσετε τον τύπο του γάντζου στο οποίο εργάζεστε.

Γιατί τα action hook κάνουν ένα πράγμα, ενώ τα φίλτρα κάτι εντελώς διαφορετικό.

Εργασία με Δράσεις

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

Το WordPress προσφέρει δύο τύπους αναρτήσεων: Αναρτήσεις (για κανονικές αναρτήσεις ιστολογίου) και Σελίδες (για μόνιμο περιεχόμενο ή περιεχόμενο που θα αλλάζει σπάνια). Για μια κανονική πλατφόρμα blogging, αυτό είναι αρκετό. Αλλά το WordPress έχει γίνει εδώ και καιρό ένα CMS.

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

Για να δημιουργήσουμε τον δικό μας προσαρμοσμένο τύπο ανάρτησης, πρέπει να κάνουμε δύο πράγματα:

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

Δράση Εγγραφής

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

Ο κώδικας μας θα πρέπει να μοιάζει με αυτό:

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

Τώρα πρέπει να ορίσουμε τη συνάρτηση.

Το κλειδί για την κατανόηση του ονόματος της συνάρτησης είναι απλό: Την ονομάσαμε tutsplus_register_post_type επειδή είναι το δεύτερο όρισμα που μετακινήσαμε στην κλήση add_action.

Κυριολεκτικά λέει στο WordPress να κάνει τα εξής: κατά την έναρξη, καλέστε τη συνάρτηση tutsplus_register_post_type.

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

Ας το διορθώσουμε αυτό.

Δημιουργήστε έναν προσαρμοσμένο τύπο ανάρτησης

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

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

Επιλέξαμε τα εξής:

  • επιγραφή
  • ετικέτες
  • περιγραφή
  • δημόσιο
  • show_ui
  • υποστηρίζει

Ελπίζουμε ότι το WordPress παρέχει τις υπόλοιπες λειτουργίες αυτόματα. Τα επιχειρήματα θα μοιάζουν με αυτό:

"Time Travelers", "labels" => array("name" => "Time Travelers", "singular_name" => "Time Traveler", "add_new_item" => "Add New Traveler", "edit_item" => "Edit Ταξιδιώτης", "new_item" => "Νέος ταξιδιώτης", "view_item" => "Προβολή ταξιδιώτη", "search_items" => "Αναζήτηση ταξιδιωτών", "not_found" => "Χωρίς ταξιδιώτες", "περιγραφή" => "Ένας τύπος ανάρτησης που χρησιμοποιείται για την παροχή πληροφοριών σχετικά με τους ταξιδιώτες στο χρόνο.", "public" => true, "show_ui" => true, "supports" => array("title", "editor", "excerpt"),) ;

Και τέλος, η πλήρης έκδοση του κώδικα για την εγγραφή του τύπου ανάρτησης:

"Time Travelers", "labels" => array("name" => "Time Travelers", "singular_name" => "Time Traveler", "add_new_item" => "Add New Traveler", "edit_item" => "Edit Ταξιδιώτης", "new_item" => "Νέος ταξιδιώτης", "view_item" => "Προβολή ταξιδιώτη", "search_items" => "Αναζήτηση ταξιδιωτών", "not_found" => "Χωρίς ταξιδιώτες", "περιγραφή" => "Ένας τύπος ανάρτησης που χρησιμοποιείται για την παροχή πληροφοριών σχετικά με τους ταξιδιώτες στο χρόνο.", "public" => true, "show_ui" => true, "supports" =>

Μετά την ενημέρωση της Κονσόλας, θα πρέπει να υπάρχει ένα νέο αντικείμενο ακριβώς κάτω από τα Σχόλια που ονομάζεται Time Travelers.

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

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

Ορισμός προσαρμοσμένων ενεργειών

Όταν έρθει η ώρα να δημιουργήσετε τα δικά σας action hook, υπάρχουν τρία βασικά πράγματα που πρέπει να κάνετε:

  1. ορίστε ένα γάντζο
  2. δώστε στο άγκιστρο μια λειτουργία
  3. επιτρέψτε στους προγραμματιστές να καλέσουν το άγκιστρο

Το πιο απλό παράδειγμα:

Μη διστάσετε να προσθέσετε αυτόν τον κώδικα στο tutsplus-actions.php , μπορείτε να μάθετε περισσότερα σχετικά με αυτό αφού διαβάσετε το άρθρο μας.

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

Μετά την ενημέρωση της κονσόλας, θα δείτε την επιγραφή "This is a custom action hook" στο επάνω μέρος της κονσόλας.

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

Στο ερώτημα για τον τύπο του δίσκου μας

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

Πώς μπορούμε να το κάνουμε; Το πρώτο βήμα είναι να δημιουργήσετε μια προσαρμοσμένη συνάρτηση που θα καλεί το άγκιστρο δράσης. Ας το κάνουμε:

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

Για να γίνει αυτό, συνδέουμε το προσαρμοσμένο άγκιστρο στο άγκιστρο προετοιμασίας:

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

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

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

$plural, "labels" => array("name" => $plural, "singular_name" => $singular, "add_new_item" => "Προσθήκη νέου ταξιδιώτη", "edit_item" => "Επεξεργασία ταξιδιώτη", "new_item" => "Νέος ταξιδιώτης", "view_item" => "Προβολή ταξιδιώτη", "search_items" => "Αναζήτηση ταξιδιωτών", "not_found" => "Χωρίς ταξιδιώτες", "περιγραφή" => "Ένας τύπος ανάρτησης που χρησιμοποιείται για παρέχετε πληροφορίες για Ταξιδιώτες στο χρόνο.", "public" => true, "show_ui" => true, "supports" => array("title", "editor", "excerpt",),); register_post_type("time_traveler", $args); )

Λάβετε υπόψη ότι δεν προσθέτουμε αυτήν τη λειτουργία σε ένα συγκεκριμένο άγκιστρο. Αντίθετα, θα την καλέσουμε από έναν ορισμό συνάρτησης που συνδέεται με την προσαρμοσμένη μας ενέργεια.

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

Αποτελέσματα

Δεν είναι δύσκολο να καταλάβεις τι είναι τα άγκιστρα. Προσθέτουν δύναμη και ευελιξία στους προγραμματιστές. Ίσως το πιο εκφοβιστικό πράγμα σχετικά με τον κώδικα είναι να ορίσετε ένα άγκιστρο στο πλαίσιο ενός άλλου άγκιστρου (καθορισμός tutsplus_register_custom_post_typeστην αρχή).

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

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

Μπορεί να μην έγραψα σωστά τα ονόματα αυτών των πραγμάτων στον τίτλο, αλλά τώρα θα σας εξηγήσω γιατί.

Γάντζος - σημαίνει γάντζος.

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

Οι γάντζοι μας θα χωριστούν σε δύο τύπους: φίλτρα και ενέργειες.

  • Φίλτραθα σας επιτρέψει να αλλάξετε τις τιμές ορισμένων μεταβλητών προτού επιστραφούν από τις συναρτήσεις.
  • Ενέργειεςθα σας επιτρέψει να εκτελέσετε όποιον κώδικα θέλετε εκεί που κρέμεται το «άγκιστρο».

Τι είναι σημαντικό να γνωρίζετε πριν ξεκινήσετε με τα άγκιστρα WordPress;

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

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

Βήμα προς βήμα ανάλυση του φίλτρου

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

Αυτό γίνεται καταρχήν χρησιμοποιώντας δύο συναρτήσεις - και .

  1. Όλα ξεκινούν από το γεγονός ότι κάπου στον κώδικα της μηχανής ή του πρόσθετου WordPress υπάρχει μια μεταβλητή που αργότερα θα χρειαστεί να επηρεαστεί από το φίλτρο. Μια συνάρτηση εκχωρείται σε αυτή τη μεταβλητή και το αποτέλεσμα της ενέργειας της συνάρτησης συνήθως εκχωρείται στην ίδια τη μεταβλητή. Επιπλέον, το όνομα του φίλτρου ορίζεται αμέσως. Για παράδειγμα, μπορεί να μοιάζει με αυτό:
    $x = apply_filters( "misha_filter" , $x );
  2. Μετά από αυτό, μπορούμε ήδη να επηρεάσουμε αυτήν τη μεταβλητή από έξω με τη βοήθεια του . Για να γίνει αυτό, για παράδειγμα, στο αρχείο functions.php, δημιουργούμε μια συνάρτηση με αυθαίρετο όνομα, το όρισμα συνάρτησης είναι η μεταβλητή $x, μέσα στη συνάρτηση εκτελούμε όλες τις απαραίτητες ενέργειες με αυτήν και τέλος επιστρέφουμε τη μεταβλητή που προκύπτει . Στη συνέχεια, δίπλα στη συνάρτηση, καλούμε το , στο οποίο καθορίζουμε το όνομα του φίλτρου και το όνομα της αυθαίρετης συνάρτησής μας ως παραμέτρους. Λιγότερα λόγια, περισσότερη δράση - εδώ μπορεί να μοιάζει:
  3. Να σταματήσει! Πριν διαβάσετε περαιτέρω την ανάρτηση, δοκιμάστε όλα αυτά μόνοι σας. Δεν χρειάζεται να γράψετε ένα πρόσθετο για αυτό - απλώς στο θέμα, για παράδειγμα, στο header.php, εμφανίστε τη μεταβλητή $x και εφαρμόστε ένα φίλτρο σε αυτήν πριν από την έξοδο και εφαρμόστε αυτό το φίλτρο στο αρχείο functions.php.

Το απλούστερο παράδειγμα με περιεχόμενο ανάρτησης μέσα στην ίδια τη μηχανή του WordPress

Ίσως έχετε ήδη δει αυτό το παράδειγμα κάπου - είναι στην επίσημη τεκμηρίωση του WordPress και το ανέφερα ήδη.

Πείτε μου, το περιεχόμενο της ανάρτησης που υπάρχει στον επεξεργαστή σας στον πίνακα διαχείρισης και αυτό που εμφανίζεται στον ιστότοπο είναι το ίδιο ή διαφορετικό;

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

Για να δείτε καθαρά, δοκιμάστε να επικολλήσετε αυτόν τον κώδικα σε μια βολική θέση στο θέμα, στο footer.php ή σε ένα αυθαίρετο:

Γάντζος δράσης βήμα προς βήμα

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

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

  1. Όλα ξεκινούν από το γεγονός ότι κάπου στον κώδικα υπάρχει ένα μέρος όπου θα χρειαστεί ενδεχομένως να εκτελεστεί πρόσθετος κώδικας. Αυτό το μέρος θα το υποδηλώσουμε με τη συνάρτηση , ως παράμετρο της οποίας θα υποδείξουμε το όνομα του "αγκίστρι". Θα φαίνεται πολύ απλό:

Λοιπόν, δεν είναι ένας απλός μηχανισμός;

Το απλούστερο παράδειγμα χρησιμοποιώντας το άγκιστρο wp_head στο WordPress

Απλώς το wp_head είναι το πρώτο πράγμα που μου ήρθε στο μυαλό αυτή τη στιγμή. Έτσι, πρώτα από όλα, ανοίξτε τη σελίδα του ιστότοπού σας, ανοίξτε την ως κώδικα HTML στο πρόγραμμα περιήγησης. Τώρα μεταβείτε στο αρχείο header.php και διαγράψτε γρήγορα τη συνάρτηση από εκεί (ξεκινά το άγκιστρο). Μετά από αυτό, δείτε πόσο αλλάζει η σελίδα σας - στυλ, σενάρια, πιθανώς κάποιος αυθαίρετος κώδικας, .

Επιλογές και προτεραιότητες

προτεραιότητες

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

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

add_action ("misha_priority" , function () ( echo "A" ; ) ); add_action ("misha_priority" , function () ( echo "B" ; ) ); add_action ("misha_priority" , function () ( echo "B" ; ) ); // το ίδιο το άγκιστρο do_action("misha_priority" ); // Θα εμφανιστεί το ABV

Και τώρα προσοχή - οι λειτουργίες και οι τρίτες παράμετροι υποστηρίζουν την ένδειξη προτεραιότητας, λαμβάνοντας αυτό υπόψη, θα τροποποιήσουμε τον κώδικά μας.

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

Μεταβίβαση πρόσθετων επιχειρημάτων σε μια συνάρτηση

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

Όλα ξεκινούν από το γεγονός ότι μία ή περισσότερες παράμετροι καθορίζονται στη συνάρτηση ή.

do_action( "misha_action" , $param1 , $param2 , $param3 );

Μετά από αυτό, η τέταρτη παράμετρος της συνάρτησης

Συνεχίζοντας το θέμα:
Εξυπνη τηλεόραση

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

Νέα άρθρα
/
Δημοφιλής