Blog

WordPress Hook Architektúra: Akciók vs. Szűrők Magyarázata

Minden nagyszerű bővítmény alapja. Tudja meg, hogyan használja a PAGEnza AI a hookokat és szűrőket a karbantartható, skálázható kód létrehozásához.

Minden WordPress bővítmény két dolog egyikét teszi: kódot futtat egy adott pillanatban (akció), vagy módosít egy értéket, mielőtt azt felhasználnák (szűrő). Ennyi. Az egész WordPress bővítmény ökoszisztéma ezen a megkülönböztetésen alapul.

A különbség megértése – és annak tudása, hogy mikor melyiket használja – az, ami elválasztja a működő bővítményeket a problémákat okozóktól.

Akciók: tegyen valamit egy adott időpontban

Az akció hook egy jelzés, amelyet a WordPress (vagy egy másik bővítmény) küld egy adott pillanatban. Ön csatol egy függvényt ehhez a jelzéshez, és a függvénye akkor fut le, amikor a jelzés aktiválódik.

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 );
}

A wp_enqueue_scripts akkor fut le, amikor a WordPress az előlapi felülethez készíti elő az erőforrások betöltését. Ennek a hooknak a használata a helyes módja a CSS és JS betöltésének – nem pedig <script> címkék közvetlen beillesztése a sablonokba.

Gyakori akció hookok, amelyeket folyamatosan használni fog:

  • init — korán fut le, jó post típusok és taxonómiák regisztrálásához
  • wp_enqueue_scripts — előlapi erőforrások betöltése
  • admin_enqueue_scripts — admin felületi erőforrások betöltése
  • save_post — akkor fut le, amikor egy bejegyzést mentenek, jó egyéni mezők feldolgozásához
  • wp_ajax_{action} — AJAX kérések kezelése hitelesített felhasználóktól
  • wp_ajax_nopriv_{action} — AJAX kérések kezelése be nem jelentkezett felhasználóktól

Szűrők: módosítson egy értéket, mielőtt azt felhasználnák

A szűrő hook ad Önnek egy értéket, lehetővé teszi annak módosítását, és elvárja, hogy Ön adja vissza a módosított verziót. A WordPress ezután az Ön által módosított értéket használja az eredeti helyett.

add_filter( 'the_content', 'my_plugin_append_cta' );

function my_plugin_append_cta( $content ) {
    if ( ! is_single() ) {
        return $content;
    }
    $cta = '<div class="post-cta">Készen állsz kipróbálni a PAGEnza-t? <a href="#">Kezdd el ingyen →</a></div>';
    return $content . $cta;
}

A kritikus szabály: mindig adjon vissza valamit egy szűrőből. Ha elfelejti a return utasítást, az érték null lesz, és Ön tönkretette azt, ami azt használta.

Gyakori szűrő hookok:

  • the_content — a bejegyzés tartalma megjelenítés előtt
  • the_title — a bejegyzés címe
  • wp_nav_menu_items — navigációs menü HTML-je
  • upload_mimes — engedélyezett fájlfeltöltési típusok
  • plugin_action_links_{plugin-file} — a bővítmények listázási oldalán megjelenő hivatkozások

Hogyan használja a PAGEnza AI a hookokat

Amikor a Bővítményépítő (Plugin Builder) generál egy bővítményt, a kódot egy osztály köré szervezi, amelynek metódusai a konstruktorban hookokhoz vannak csatolva. Ez a minta elkerüli a globális függvénynevek ütközését és rendben tartja a kódot.

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 ) {
        // mindig adjon vissza
        return $content;
    }
}

new My_Plugin();

A biztonsági vizsgálat kifejezetten ellenőrzi, hogy az AJAX kezelők tartalmaznak-e egy nonce ellenőrzést és egy jogosultsági ellenőrzést, mielőtt bármit is tennének:

add_action( 'wp_ajax_my_action', [ $this, 'handle_ajax' ] );

public function handle_ajax() {
    // Biztonság: nonce ellenőrzése
    check_ajax_referer( 'my_nonce_action', 'nonce' );

    // Biztonság: jogosultságok ellenőrzése
    if ( ! current_user_can( 'manage_options' ) ) {
        wp_send_json_error( 'Nem elegendő jogosultság', 403 );
    }

    // Most már biztonságos a feldolgozás
    $data = sanitize_text_field( $_POST['data'] ?? '' );
    wp_send_json_success( [ 'result' => $data ] );
}

Ezek bármelyikének hiánya biztonsági problémaként van jelölve, és megakadályozza a bővítmény kiadását.

Prioritás és a hook sor

Amikor több függvény van ugyanahhoz a hookhoz csatolva, azok a prioritás sorrendjében futnak (kisebb szám = előbb fut). Az alapértelmezett prioritás 10.

add_action( 'init', 'runs_first', 5 );
add_action( 'init', 'runs_second', 10 );   // alapértelmezett
add_action( 'init', 'runs_last', 20 );

Ez akkor fontos, amikor a bővítményének egy másik bővítmény kódja előtt vagy után kell futnia. Ha olyat módosít, amit egy másik bővítmény is módosít, a prioritás határozza meg, ki nyer.

Egy gyakori minta: ha egy sablon szűrőjét írja felül, használjon 20-as vagy magasabb prioritást, hogy biztosan a sablon kódja után fusson.

Hookok eltávolítása

Eltávolíthat egy hookot, amelyet valaki más adott hozzá – beleértve a sablon és a bővítmény hookjait is:

remove_action( 'wp_head', 'wp_generator' );  // eltávolítja a WP verziót a <head>-ből
remove_filter( 'the_content', 'wpautop' );   // eltávolítja az automatikus bekezdés-tördelést

A csapda: csak akkor távolíthat el egy hookot, ha az remove_action/remove_filter hívást az eredeti add_action/add_filter futása UTÁN hívja meg. Ez általában azt jelenti, hogy a törlését egy későbbi akcióba kell hookolnia.