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áhozwp_enqueue_scripts— előlapi erőforrások betöltéseadmin_enqueue_scripts— admin felületi erőforrások betöltésesave_post— akkor fut le, amikor egy bejegyzést mentenek, jó egyéni mezők feldolgozásáhozwp_ajax_{action}— AJAX kérések kezelése hitelesített felhasználóktólwp_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őttthe_title— a bejegyzés címewp_nav_menu_items— navigációs menü HTML-jeupload_mimes— engedélyezett fájlfeltöltési típusokplugin_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.