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 registreerimiseks
  • wp_enqueue_scripts — laadib esiotsa ressursse
  • admin_enqueue_scripts — laadib administraatori ressursse
  • save_post — käivitub postituse salvestamisel, hea kohandatud väljade töötlemiseks
  • wp_ajax_{action} — käsitleb autentitud kasutajate AJAX-päringuid
  • wp_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 kuvamist
  • the_title — postituse pealkiri
  • wp_nav_menu_items — navigatsioonimenüü HTML
  • upload_mimes — lubatud failiüleslaadimise tüübid
  • plugin_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.