Blog
WordPress Hook Arhitektura: Akcije vs. Filteri Objašnjeno
Temelj svakog sjajnog dodatka. Naučite kako PAGEnza AI koristi hookove i filtere za stvaranje održivog, skalabilnog koda.
Svaki WordPress dodatak radi jednu od dvije stvari: pokreće kod u određeno vrijeme (akcija) ili mijenja vrijednost prije nego što se iskoristi (filter). To je to. Cijeli ekosustav WordPress dodataka izgrađen je na toj razlici.
Razumijevanje razlike — i kada koristiti svaku — ono je što odvaja dodatke koji rade od dodataka koji uzrokuju probleme.
Akcije: učinite nešto u određenom trenutku
Hook akcije je signal koji WordPress (ili drugi dodatak) šalje u određeno vrijeme. Priložite funkciju tom signalu, i vaša funkcija se pokreće kada se signal aktivira.
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 se pokreće kada WordPress priprema učitavanje resursa za prednji dio. Korištenje ovog hooka je ispravan način za učitavanje CSS-a i JS-a — ne ubacivanje <script> oznaka izravno u predloške.
Uobičajeni hookovi akcija koje ćete stalno koristiti:
init— pokreće se rano, dobro za registraciju tipova postova i taksonomijawp_enqueue_scripts— učitavanje resursa za prednji dioadmin_enqueue_scripts— učitavanje resursa za administracijusave_post— pokreće se kada se post spremi, dobro za obradu prilagođenih poljawp_ajax_{action}— rukovanje AJAX zahtjevima od ovlaštenih korisnikawp_ajax_nopriv_{action}— rukovanje AJAX zahtjevima od neprijavljenih korisnika
Filteri: izmijenite vrijednost prije nego što se iskoristi
Hook filter daje vam vrijednost, dopušta vam da je izmijenite i očekuje da vratite izmijenjenu verziju. WordPress zatim koristi vašu izmijenjenu vrijednost umjesto originalne.
add_filter( 'the_content', 'my_plugin_append_cta' );
function my_plugin_append_cta( $content ) {
if ( ! is_single() ) {
return $content;
}
$cta = '<div class="post-cta">Spremni isprobati PAGEnza? <a href="#">Započnite besplatno →</a></div>';
return $content . $cta;
}
Ključno pravilo: uvijek nešto vratite iz filtera. Ako zaboravite return, vrijednost postaje null i upravo ste pokvarili sve što ju je koristilo.
Uobičajeni hookovi filtera:
the_content— sadržaj posta prije prikazathe_title— naslov postawp_nav_menu_items— HTML izbornika navigacijeupload_mimes— dopuštene vrste datoteka za učitavanjeplugin_action_links_{plugin-file}— poveznice prikazane na stranici popisa dodataka
Kako PAGEnza AI koristi hookove
Kada Plugin Builder generira dodatak, strukturira kod oko klase s metodama povezanim na hookove u konstruktoru. Ovaj obrazac izbjegava sukobe naziva globalnih funkcija i održava kod organiziranim.
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 ) {
// uvijek vratite
return $content;
}
}
new My_Plugin();
Sigurnosni skener posebno provjerava jesu li AJAX rukovatelji uključili provjeru nonce-a i provjeru ovlasti prije bilo kakvog djelovanja:
add_action( 'wp_ajax_my_action', [ $this, 'handle_ajax' ] );
public function handle_ajax() {
// Sigurnost: provjeri nonce
check_ajax_referer( 'my_nonce_action', 'nonce' );
// Sigurnost: provjeri ovlasti
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( 'Nedovoljne ovlasti', 403 );
}
// Sada je sigurno za obradu
$data = sanitize_text_field( $_POST['data'] ?? '' );
wp_send_json_success( [ 'result' => $data ] );
}
Nedostatak bilo kojeg od ovih označava se kao sigurnosni problem i blokira izdavanje dodatka.
Prioritet i red čekanja hookova
Kada su više funkcija povezane na isti hook, pokreću se redoslijedom prioriteta (niži broj = pokreće se prvi). Zadana vrijednost prioriteta je 10.
add_action( 'init', 'runs_first', 5 );
add_action( 'init', 'runs_second', 10 ); // zadano
add_action( 'init', 'runs_last', 20 );
Ovo je važno kada vaš dodatak treba pokrenuti prije ili poslije koda drugog dodatka. Ako mijenjate nešto što drugi dodatak također mijenja, prioritet kontrolira tko pobjeđuje.
Uobičajeni obrazac: ako prepisujete filter teme, koristite prioritet 20 ili viši kako biste bili sigurni da se pokrećete nakon koda teme.
Uklanjanje hookova
Možete ukloniti hook koji je netko drugi dodao — uključujući hookove tema i dodataka:
remove_action( 'wp_head', 'wp_generator' ); // uklanja verziju WP iz <head>
remove_filter( 'the_content', 'wpautop' ); // uklanja automatsko umotavanje u odlomke
Problem: hook možete ukloniti samo ako pozovete remove_action/remove_filter nakon što se originalni add_action/add_filter pokrenuo. Ovo obično znači povezivanje vašeg uklanjanja na kasniju akciju.