Blogi
WordPress Hook -arkkitehtuuri: Toiminnot vs. Suodattimet selitettynä
Jokaisen loistavan lisäosan perusta. Opi, kuinka PAGEnza AI käyttää koukkuja ja suodattimia ylläpidettävän, skaalautuvan koodin luomiseen.
Jokainen WordPress-lisäosa tekee yhden kahdesta asiasta: se suorittaa koodia tiettynä hetkenä (toiminto) tai se muokkaa arvoa ennen sen käyttöä (suodatin). Siinä kaikki. Koko WordPress-lisäosaekosysteemi perustuu tähän eroon.
Eron ymmärtäminen – ja milloin kumpaakin käytetään – erottaa lisäosat, jotka toimivat, lisäosista, jotka aiheuttavat ongelmia.
Toiminnot: tee jotain tiettynä hetkenä
Toimintokoukku on signaali, jonka WordPress (tai toinen lisäosa) lähettää tiettynä hetkenä. Liität funktion siihen signaaliin, ja funktiosi suoritetaan, kun signaali laukeaa.
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 laukeaa, kun WordPress valmistautuu lataamaan resursseja etusivulle. Sen käyttäminen on oikea tapa ladata CSS ja JS – ei pudottaa <script>-tageja suoraan malleihin.
Yleisiä toimintokoukkuja, joita käytät jatkuvasti:
init— suoritetaan aikaisin, hyvä postaus tyyppien ja taksonomioiden rekisteröintiinwp_enqueue_scripts— lataa etusivun resurssitadmin_enqueue_scripts— lataa ylläpidon resurssitsave_post— suoritetaan, kun postaus tallennetaan, hyvä mukautettujen kenttien käsittelyynwp_ajax_{action}— käsittelee AJAX-pyyntöjä todennetuilta käyttäjiltäwp_ajax_nopriv_{action}— käsittelee AJAX-pyyntöjä kirjautumattomilta käyttäjiltä
Suodattimet: muokkaa arvoa ennen sen käyttöä
Suodatinkoukku antaa sinulle arvon, antaa sinun muokata sitä ja odottaa sinun palauttavan muokatun version. WordPress käyttää sitten muokattua arvoasi alkuperäisen sijaan.
add_filter( 'the_content', 'my_plugin_append_cta' );
function my_plugin_append_cta( $content ) {
if ( ! is_single() ) {
return $content;
}
$cta = '<div class="post-cta">Valmis kokeilemaan PAGEnzaa? <a href="#">Aloita ilmaiseksi →</a></div>';
return $content . $cta;
}
Tärkeä sääntö: palauta aina jotain suodattimesta. Jos unohdat return-lauseen, arvo muuttuu nulliksi ja olet juuri rikkonut kaiken, mikä sitä käytti.
Yleisiä suodatinkoukkuja:
the_content— postauksen sisältö ennen näyttöäthe_title— postauksen otsikkowp_nav_menu_items— navigointivalikon HTMLupload_mimes— sallitut tiedostojen lataustyypitplugin_action_links_{plugin-file}— linkit, jotka näkyvät lisäosaluettelosivulla
Kuinka PAGEnza AI käyttää koukkuja
Kun Plugin Builder luo lisäosan, se jäsentää koodin luokan ympärille, jonka metodit on liitetty koukkuihin konstruktorissa. Tämä malli välttää globaalien funktioiden nimien törmäykset ja pitää koodin järjestyksessä.
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 ) {
// aina palauta
return $content;
}
}
new My_Plugin();
Turvallisuustarkistus tarkistaa erityisesti, että AJAX-käsittelijät sisältävät sekä nonce-tarkistuksen että käyttöoikeustarkistuksen ennen minkään tekemistä:
add_action( 'wp_ajax_my_action', [ $this, 'handle_ajax' ] );
public function handle_ajax() {
// Turvallisuus: tarkista nonce
check_ajax_referer( 'my_nonce_action', 'nonce' );
// Turvallisuus: tarkista käyttöoikeudet
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( 'Riittämättömät käyttöoikeudet', 403 );
}
// Nyt turvallista käsitellä
$data = sanitize_text_field( $_POST['data'] ?? '' );
wp_send_json_success( [ 'result' => $data ] );
}
Kummankin puuttuminen merkitään turvallisuusongelmaksi ja estää lisäosan julkaisun.
Prioriteetti ja koukkujono
Kun useita funktioita on liitetty samaan koukkuun, ne suoritetaan prioriteetin mukaan (pienempi numero = suoritetaan ensin). Oletusprioriteetti on 10.
add_action( 'init', 'runs_first', 5 );
add_action( 'init', 'runs_second', 10 ); // oletus
add_action( 'init', 'runs_last', 20 );
Tämä on tärkeää, kun lisäosasi tarvitsee suorittua ennen toisen lisäosan koodia tai sen jälkeen. Jos muokkaat jotain, mitä toinen lisäosa myös muokkaa, prioriteetti määrää, kuka voittaa.
Yleinen malli: jos ohitat teeman suodattimen, käytä prioriteettia 20 tai korkeampaa varmistaaksesi, että suoritus tapahtuu teeman koodin jälkeen.
Koukkujen poistaminen
Voit poistaa jonkun muun lisäämän koukun – mukaan lukien teeman ja lisäosien koukut:
remove_action( 'wp_head', 'wp_generator' ); // poistaa WP-version <head>-osiosta
remove_filter( 'the_content', 'wpautop' ); // poistaa automaattisen kappaleen rivityksen
Haaste: voit poistaa koukun vain, jos kutsut remove_action/remove_filter sen jälkeen, kun alkuperäinen add_action/add_filter on suoritettu. Tämä tarkoittaa yleensä koukun liittämistä myöhäisempään toimintoon.