Tinklaraštis
WordPress Hookų Architektūra: Veiksmai prieš Filtras Paaiškinti
Kiekvieno puikaus papildinio pagrindas. Sužinokite, kaip PAGEnza AI naudoja kabliukus ir filtrus, kad sukurtų prižiūrimą, plečiamą kodą.
Kiekvienas WordPress papildinys daro vieną iš dviejų dalykų: vykdo kodą tam tikru momentu (veiksmas) arba pakeičia reikšmę prieš ją panaudojant (filtras). Viskas. Visa WordPress papildinių ekosistema yra pastatyta ant šio skirtumo.
Supratimas, koks skirtumas – ir kada naudoti kiekvieną – atskiria veikiančius papildinius nuo tų, kurie sukelia problemų.
Veiksmai: daryti kažką tam tikru metu
Veiksmų kabliukas yra signalas, kurį WordPress (arba kitas papildinys) siunčia tam tikru momentu. Prie to signalo pritvirtinate funkciją, ir jūsų funkcija paleidžiama, kai signalas suveikia.
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 paleidžiamas, kai WordPress ruošiasi įkelti išteklius priekinei daliai. Kabinimas prie jo yra teisingas būdas įkelti CSS ir JS – ne įterpiant <script> žymas tiesiai į šablonus.
Dažni veiksmų kabliukai, kuriuos nuolat naudosite:
init— paleidžiamas anksti, tinka registruoti įrašų tipus ir taksonomijaswp_enqueue_scripts— įkelti priekinės dalies ištekliusadmin_enqueue_scripts— įkelti administratoriaus ištekliussave_post— paleidžiamas, kai įrašas išsaugojamas, tinka apdoroti pasirinktinius laukuswp_ajax_{action}— apdoroti AJAX užklausas iš autentifikuotų vartotojųwp_ajax_nopriv_{action}— apdoroti AJAX užklausas iš neprisijungusių vartotojų
Filtrai: pakeisti reikšmę prieš ją panaudojant
Filtro kabliukas suteikia jums reikšmę, leidžia ją pakeisti ir tikisi, kad grąžinsite pakeistą versiją. Tada WordPress naudoja jūsų pakeistą reikšmę vietoj originalios.
add_filter( 'the_content', 'my_plugin_append_cta' );
function my_plugin_append_cta( $content ) {
if ( ! is_single() ) {
return $content;
}
$cta = '<div class="post-cta">Ready to try PAGEnza? <a href="#">Get started free →</a></div>';
return $content . $cta;
}
Svarbiausia taisyklė: visada kažką grąžinkite iš filtro. Jei pamiršite return, reikšmė taps null ir jūs sugadinsite viską, kas ją naudojo.
Dažni filtro kabliukai:
the_content— įrašo turinys prieš rodantthe_title— įrašo pavadinimaswp_nav_menu_items— navigacijos meniu HTMLupload_mimes— leidžiami failų įkėlimo tipaiplugin_action_links_{plugin-file}— nuorodos, rodomos papildinių sąrašo puslapyje
Kaip PAGEnza AI naudoja kabliukus
Kai „Plugin Builder“ sukuria papildinį, jis struktūrizuoja kodą aplink klasę su metodais, prijungtais prie kabliukų konstruktoriuje. Šis modelis vengia globalių funkcijų pavadinimų susidūrimų ir palaiko kodą tvarkingą.
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 ) {
// always return
return $content;
}
}
new My_Plugin();
Saugos patikra specialiai tikrina, ar AJAX tvarkytuvai apima tiek „nonce“ patikrinimą, tiek galimybių patikrinimą prieš atliekant bet kokius veiksmus:
add_action( 'wp_ajax_my_action', [ $this, 'handle_ajax' ] );
public function handle_ajax() {
// Security: verify nonce
check_ajax_referer( 'my_nonce_action', 'nonce' );
// Security: verify permissions
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( 'Insufficient permissions', 403 );
}
// Now safe to process
$data = sanitize_text_field( $_POST['data'] ?? '' );
wp_send_json_success( [ 'result' => $data ] );
}
Bet kurio iš šių trūkumas pažymimas kaip saugos problema ir neleidžia papildiniui būti išleistam.
Prioritetas ir kabliukų eilė
Kai prie to paties kabliuko prijungiamos kelios funkcijos, jos paleidžiamos pagal prioritetą (mažesnis skaičius = paleidžiama pirma). Numatytasis prioritetas yra 10.
add_action( 'init', 'runs_first', 5 );
add_action( 'init', 'runs_second', 10 ); // default
add_action( 'init', 'runs_last', 20 );
Tai svarbu, kai jūsų papildinys turi veikti prieš arba po kito papildinio kodo. Jei keičiate kažką, ką kitas papildinys taip pat keičia, prioritetas lemia, kas laimi.
Dažnas modelis: jei perrašote temos filtrą, naudokite 20 ar didesnį prioritetą, kad įsitikintumėte, jog veikiate po temos kodo.
Kabliukų pašalinimas
Galite pašalinti kabliuką, kurį pridėjo kas nors kitas – įskaitant temos ir papildinių kabliukus:
remove_action( 'wp_head', 'wp_generator' ); // pašalina WP versiją iš <head>
remove_filter( 'the_content', 'wpautop' ); // pašalina automatinį pastraipų sudarymą
Sąlyga: galite pašalinti kabliuką tik tada, jei iškviečiate remove_action/remove_filter po to, kai originalus add_action/add_filter buvo paleistas. Tai paprastai reiškia, kad jūsų pašalinimas turi būti prijungtas prie vėlesnio veiksmo.