Blogi
WordPressi konksude arhitektuur: tegevused vs. filtrid selgitatud
Iga suurepärase pistikprogrammi alus. Siit saate teada, kuidas PAGEnza AI kasutab hooldatava, skaleeritava koodi loomiseks konksusid ja filtreid.
Iga WordPressi pistikprogramm teeb ühte kahest asjast: see käivitab koodi kindlal hetkel (tegevus) või muudab väärtust enne selle kasutamist (filter). See on kõik. Kogu WordPressi pistikprogrammide ökosüsteem on ehitatud selle eristuse peale.
Erinevuse mõistmine – ja millal kumbagi kasutada – eristab pistikprogramme, mis töötavad, pistikprogrammidest, mis põhjustavad probleeme.
Tegevused: tehke midagi kindlal ajahetkel
Tegevuse konks on signaal, mille WordPress (või mõni muu pistikprogramm) saadab kindlal hetkel. Teie ühendate funktsiooni selle signaaliga ja teie funktsioon käivitub, kui signaal käivitub.
add_action( 'wp_enqueue_scripts', 'my_plugin_load_assets' );
function my_plugin_load_assets() {
wp_enqueue_style( 'my-plugin', plugin_dir_url( __FILE__ ) . 'style.css' );
wp_enqueue_script( 'my-plugin', plugin_dir_url( __FILE__ ) . 'script.js', ['jquery'], '1.0', true );
}
wp_enqueue_scripts käivitub, kui WordPress valmistub esiotsa jaoks ressursside laadimiseks. Selle kasutamine on õige viis CSS-i ja JS-i laadimiseks – mitte <script> siltide otse mallidesse paigutamine.
Levinud tegevuse konksud, mida te pidevalt kasutate:
init— käivitub varakult, hea postituste tüüpide ja taksonoomiate registreerimisekswp_enqueue_scripts— laadib esiotsa ressursseadmin_enqueue_scripts— laadib administraatori ressurssesave_post— käivitub postituse salvestamisel, hea kohandatud väljade töötlemisekswp_ajax_{action}— käsitleb autentitud kasutajate AJAX-päringuidwp_ajax_nopriv_{action}— käsitleb sisselogimata kasutajate AJAX-päringuid
Filtrid: muutke väärtust enne selle kasutamist
Filtri konks annab teile väärtuse, laseb teil seda muuta ja ootab, et te muudetud versiooni tagastaksite. WordPress kasutab seejärel teie muudetud väärtust originaali asemel.
add_filter( 'the_content', 'my_plugin_append_cta' );
function my_plugin_append_cta( $content ) {
if ( ! is_single() ) {
return $content;
}
$cta = '<div class="post-cta">Valmis proovima PAGEnza? <a href="#">Alusta tasuta →</a></div>';
return $content . $cta;
}
Oluline reegel: tagastage filtrist alati midagi. Kui unustate return, muutub väärtus nulliks ja olete rikkunud kõik, mis seda kasutas.
Levinud filtri konksud:
the_content— postituse sisu enne kuvamistthe_title— postituse pealkiriwp_nav_menu_items— navigatsioonimenüü HTMLupload_mimes— lubatud failiüleslaadimise tüübidplugin_action_links_{plugin-file}— lingid, mida kuvatakse pistikprogrammide loendi lehel
Kuidas PAGEnza AI konksusid kasutab
Kui pistikprogrammide koostaja loob pistikprogrammi, struktureerib see koodi ümber klassi ümber, mille meetodid on konstruktoris konksudele ühendatud. See muster väldib globaalsete funktsiooninimede kokkupõrkeid ja hoiab koodi organiseerituna.
class My_Plugin {
public function __construct() {
add_action( 'init', [ $this, 'register_post_type' ] );
add_action( 'wp_enqueue_scripts', [ $this, 'load_assets' ] );
add_filter( 'the_content', [ $this, 'append_content' ] );
}
public function register_post_type() { /* ... */ }
public function load_assets() { /* ... */ }
public function append_content( $content ) {
// alati tagasta
return $content;
}
}
new My_Plugin();
Turvakontroll kontrollib spetsiifiliselt, et AJAX-i käitlejad sisaldaksid enne mis tahes toimingut nii nonce'i kontrolli kui ka võimekuse kontrolli:
add_action( 'wp_ajax_my_action', [ $this, 'handle_ajax' ] );
public function handle_ajax() {
// Turvalisus: kontrolli nonce'i
check_ajax_referer( 'my_nonce_action', 'nonce' );
// Turvalisus: kontrolli õigusi
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( 'Ebapiisavad õigused', 403 );
}
// Nüüd on ohutu töödelda
$data = sanitize_text_field( $_POST['data'] ?? '' );
wp_send_json_success( [ 'result' => $data ] );
}
Kummagi neist puudumine märgitakse turvaprobleemina ja see takistab pistikprogrammi väljaandmist.
Prioriteet ja konksude järjekord
Kui samale konksule on ühendatud mitu funktsiooni, käivituvad need prioriteedi järgi (madalam number = käivitub esimesena). Vaikimisi prioriteet on 10.
add_action( 'init', 'runs_first', 5 );
add_action( 'init', 'runs_second', 10 ); // vaikimisi
add_action( 'init', 'runs_last', 20 );
See on oluline, kui teie pistikprogramm peab käivituma enne või pärast teise pistikprogrammi koodi. Kui te muudate midagi, mida teine pistikprogramm samuti muudab, kontrollib prioriteet, kes võidab.
Levinud muster: kui te üle kirjutate teema filtri, kasutage prioriteeti 20 või kõrgemat, et tagada, et see käivitub pärast teema koodi.
Konksude eemaldamine
Võite eemaldada konksu, mille keegi teine on lisanud – sealhulgas teema ja pistikprogrammide konksud:
remove_action( 'wp_head', 'wp_generator' ); // eemaldab WP versiooni <head>ist
remove_filter( 'the_content', 'wpautop' ); // eemaldab automaatse lõigu vormingu
Nipiga: saate konksu eemaldada ainult siis, kui kutsute remove_action/remove_filter pärast seda, kui algne add_action/add_filter on käivitunud. See tähendab tavaliselt teie eemaldamise ühendamist hilisema tegevusega.