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 taksonomijas
  • wp_enqueue_scripts — įkelti priekinės dalies išteklius
  • admin_enqueue_scripts — įkelti administratoriaus išteklius
  • save_post — paleidžiamas, kai įrašas išsaugojamas, tinka apdoroti pasirinktinius laukus
  • wp_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š rodant
  • the_title — įrašo pavadinimas
  • wp_nav_menu_items — navigacijos meniu HTML
  • upload_mimes — leidžiami failų įkėlimo tipai
  • plugin_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.