Blog
Arhitektura WordPress kljuke: Akcije proti filtrom, pojasnjeno
Temelj vsakega odličnega vtičnika. Naučite se, kako PAGEnza AI uporablja kljuke in filtre za ustvarjanje vzdržljive, razširljive kode.
Vsak vtičnik za WordPress naredi eno od dveh stvari: izvede kodo ob določenem času (akcija) ali modificira vrednost, preden se uporabi (filter). To je vse. Celoten ekosistem vtičnikov za WordPress je zgrajen na tej razliki.
Razumevanje razlike — in kdaj uporabiti vsako — je tisto, kar loči vtičnike, ki delujejo, od vtičnikov, ki povzročajo težave.
Akcije: naredi nekaj ob določenem času
Kljuka akcije je signal, ki ga WordPress (ali drug vtičnik) pošlje ob določenem času. Na ta signal pripnete funkcijo, vaša funkcija pa se izvede, ko signal sproži.
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 sproži, ko se WordPress pripravlja naložiti sredstva za sprednji del. Pripetje nanj je pravilen način nalaganja CSS in JS — ne vstavljanje oznak <script> neposredno v predloge.
Pogoste kljuke akcij, ki jih boste nenehno uporabljali:
init— se izvede zgodaj, dobro za registracijo vrst objav in taksonomijwp_enqueue_scripts— nalaganje sredstev za sprednji deladmin_enqueue_scripts— nalaganje sredstev za skrbniški vmesniksave_post— se izvede ob shranjevanju objave, dobro za obdelavo polj po meriwp_ajax_{action}— obravnavanje AJAX zahtevkov avtenticiranih uporabnikovwp_ajax_nopriv_{action}— obravnavanje AJAX zahtevkov neprijavljenih uporabnikov
Filtri: modificiraj vrednost, preden se uporabi
Kljuka filtra vam da vrednost, vam omogoči, da jo modificirate, in od vas pričakuje, da vrnete modificirano različico. WordPress nato uporabi vašo modificirano vrednost namesto izvirne.
add_filter( 'the_content', 'my_plugin_append_cta' );
function my_plugin_append_cta( $content ) {
if ( ! is_single() ) {
return $content;
}
$cta = '<div class="post-cta">Ste pripravljeni preizkusiti PAGEnza? <a href="#">Začnite brezplačno →</a></div>';
return $content . $cta;
}
Ključno pravilo: vedno nekaj vrnite iz filtra. Če pozabite return, vrednost postane null in preprosto ste pokvarili vse, kar jo je uporabljalo.
Pogoste kljuke filtrov:
the_content— vsebina objave pred prikazomthe_title— naslov objavewp_nav_menu_items— HTML menija za navigacijoupload_mimes— dovoljeni tipi nalaganj datotekplugin_action_links_{plugin-file}— povezave, prikazane na strani seznama vtičnikov
Kako PAGEnza AI uporablja kljuke
Ko graditelj vtičnikov ustvari vtičnik, kodno strukturo postavi okoli razreda z metodami, pripetimi na kljuke v konstruktorju. Ta vzorec se izogne kolizijam imen globalnih funkcij in ohranja kodo organizirano.
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 ) {
// vedno vrni
return $content;
}
}
new My_Plugin();
Varnostni pregled posebej preverja, ali obravnavala AJAX vključujejo preverjanje nonce in preverjanje zmožnosti, preden naredijo karkoli:
add_action( 'wp_ajax_my_action', [ $this, 'handle_ajax' ] );
public function handle_ajax() {
// Varnost: preveri nonce
check_ajax_referer( 'my_nonce_action', 'nonce' );
// Varnost: preveri dovoljenja
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( 'Nezadostna dovoljenja', 403 );
}
// Zdaj je varno za obdelavo
$data = sanitize_text_field( $_POST['data'] ?? '' );
wp_send_json_success( [ 'result' => $data ] );
}
Manjkanje katerega koli od teh je označeno kot varnostna težava in preprečuje izdajo vtičnika.
Prednost in čakalna vrsta kljuk
Ko je več funkcij pripetih na isto kljuko, se izvedejo po vrstnem redu prednosti (nižje število = izvede se najprej). Privzeta prednost je 10.
add_action( 'init', 'runs_first', 5 );
add_action( 'init', 'runs_second', 10 ); // privzeto
add_action( 'init', 'runs_last', 20 );
To je pomembno, ko mora vaš vtičnik delovati pred ali po kodi drugega vtičnika. Če modificirate nekaj, kar modificira tudi drug vtičnik, prednost določa, kdo zmaga.
Običajen vzorec: če prepišete filter teme, uporabite prednost 20 ali višjo, da zagotovite, da se izvede po kodi teme.
Odstranjevanje kljuk
Lahko odstranite kljuko, ki jo je dodal nekdo drug — vključno s kljukami teme in vtičnikov:
remove_action( 'wp_head', 'wp_generator' ); // odstrani verzijo WP iz <head>
remove_filter( 'the_content', 'wpautop' ); // odstrani samodejno zlaganje odstavkov
Ulov: kljuko lahko odstranite le, če pokličete remove_action/remove_filter po tem, ko se je prvotni add_action/add_filter že izvedel. To običajno pomeni, da morate odstranitev pripeti na poznejšo akcijo.