Sisään edellisen osan sarjamme luomme pohjan WordPress-laajennukselle, jonka ydin tunnistaa. Tänään opimme muuttamaan ytimen oletusominaisuuksia.

Koukkujen, toimintojen ja suodattimien käsite on siitä vastuussa; joka on koko WordPress-plugins-järjestelmän todellinen sydän.

Kaikki alkaa ydin itse tuottamista "koukkuista".

Mikä on "koukku"? Se on erityisen merkitty paikka koodin (minkä tahansa käsikirjoituksen), jossa jotkut tahallaan rekisteröidyt - "hooked into" -toiminnot voidaan suorittaa rekisteröinnillä määritellyssä järjestyksessä.

WordPressissä on kaksi erilaista koukkua, jotka poikkeavat toisistaan:

  • Toimintakoukku: merkitsee paikan, jossa suoritetaan toiminto, esimerkiksi prosessin syöttö ja tallentaminen tietokannasta
  • Suodattimen koukku: merkitsee paikan, jolla muutosta käytetään arvoon (tavallisesti toimitetaan muuttujana) siten, että seuraava koodi käyttää säädettyä arvoa

Upottavat yksityiskohdat ...

Tehtävien tekeminen

WordPress-toimintojen yhteinen logiikka on hyvin yksinkertainen:

  1. Merkitse paikka, jossa mukautetun koodin pitäisi mennä, "toimintokoukulla" ja sen parametreilla
  2. Luo toimintotoiminto, joka suorittaa uuden koodin käyttämällä koukun (tarvittaessa) parametreja
  3. Rekisteröi toimenpide (# 2), joka suoritetaan, kun koukku (# 1) käynnistetään jonkin prioriteetin avulla
  4. Kun WordPress lataa pyydetyt sivut ja löytää koukun, se etsii kaikki toiminnot "koukussa" ja suorittaa niitä yksitellen niiden prioriteettien mukaisesti

Tehtävän nro 1 suorittamiseksi meillä on "do_action" -toiminto:

do_action($tag, $arg_1, $arg_2, ... , $arg_n);

Se hyväksyy seuraavat parametrit: $ tag - koukku "nimi", joka auttaa tunnistamaan tietyn koukun ja erottamaan sen muun muassa; $ arg_1, $ arg_2, ..., $ arg_n - arvot parametreiksi hyväksytyille toiminnoille. Tarvittavat argumentit saattavat olla - nollasta aina kohtuulliseen määrään asti.

WordPressissä on paljon ennalta määritettyjä koukkuja:

do_action( 'init' );

Tämä on hyvin yksinkertainen tapaus ilman lisäparametreja. Tämä koukku käynnistyy, kun suurin osa WordPressistä on muodostettu ja on tullut aika rekisteröidä omia objekteja, kuten esimerkiksi muokattua postityyppiä.

do_action('save_post', $post_id, $post);

Tässä esimerkissä koukku aktivoidaan, kun viesti tallennetaan ja antaa kaksi lisäparametria toimimaan - post_id- ja post-objektin kanssa, jotka sisältävät kaikki tallennetun viestin tiedot.

Koukkujen luominen ei kuitenkaan ole vain ydinryhmän etuoikeus; jokainen kehittäjä voi tehdä mukautetun koukun plugin (tai teema). Tämän ansiosta meillä on paljon valtaa, esimerkiksi teemakuvakkeet mahdollistavat lasten teemojen muokkaamasta paitsi tyylejä myös jopa vanhempien merkitsemistä korvaamatta koko tiedostoja.

do_action( 'my_truly_custom_hook' );

Kun olemme löytäneet (tai luoneet) oikean koukun ja luoneet mukautetun toiminnon, meidän on rekisteröitävä uusin toteutus "add_action" avulla.

add_action($tag, $function_to_add, $priority, $accepted_args_number);

Kuten voidaan odottaa, "add_action" -menetelmä hyväksyy kaksi pakollista parametria: $ tag: sopivan koukun nimi ja $ function_to_add: toiminnon nimi, joka olisi suoritettava. Muut kaksi parametria ovat valinnaisia: $ prioriteetti: kokonaisluku määrittääksesi järjestyksen, jossa rekisteröidyt toiminnot suoritetaan (oletusarvoisesti 10), $ hyväksytty_numerotunnus: argumenttien määrä, jonka rekisteröity toiminto hyväksyy (oletusarvoisesti 1) .

Katsotaan esimerkkiä, joka havainnollistaa koko prosessia. Oletetaan, että haluamme lisätä pienen huomautuksen sivun alareunaan. Voimme käyttää wp_footer-koukkua, koska se on osa pakollista alatunnistekoodia, jonka jokaiseen teemaan tulisi sisällyttää.

function msp_helloworld_footer_notice(){echo "
Hello, I'm your custom notice
";}add_action('wp_footer', 'msp_helloworld_footer_notice');

Tässä esimerkissä luodaan ennalta määrätty toiminto, joka tuottaa yksinkertaisesti ilmoituksen merkinnän (etuliitteiden tärkeys, josta olemme keskustelleet edellinen artikkeli , joten tutustu lisätietoja varten) ja liittäkää se sitten "wp_footer". Kun tämä koodi sisällytetään plugin-tiedostoomme (josta myös keskustellaan edellisessä artikkelissa), näemme sivuston tuloksen.

cnotice

Suodattimien käyttäminen

Suodattimet toimivat samalla logiikalla kuin toiminnot. Ainoa ero on se, että ne eivät suorita vain osan koodia tietyllä paikalla. He suorittavat tämän koodin MUUTETTAA koukkuun annettuja arvoja. Tämä tarkoittaa, että jokaisella suodatinkoukulla on siihen liittyvä arvo (useimmissa tapauksissa muuttuja).

Suodatuksen suorittavan tehtävän tulisi ottaa tämä arvo, muuttaa se jotenkin ja palauttaa se edelleen käyttöä varten. Jotta koukkuista ja suodattimista vastuussa olevien toimintojen syntaksi olisi hieman erilainen.

apply_filters($tag, $value_to_filter, $arg_1, $arg_2, ... , $arg_n);

Toiminto "apply_filter" luo suodattimen koukun, jossa on $ tagin nimi ja pakollinen parametri $ value_to_filter (se voi olla tyhjä, mutta sen pitäisi olla paras käytäntö). Muut argumentit ovat valinnaisia ​​ja toimivat samalla tavoin kuin toimilla.

filter_function($value_to_filter, $arg_1, $arg_2, ... , $arg_n){//filtering code goes herereturn $value_to_filter; //value has to be returned back}

Tämä on suodatustoiminnon luuranko, joka osoittaa, että pitäisi a) hyväksyä ainakin yksi argumentti, muutoksen arvo; ja b) palauttaa arvon lopussa.

add_filter($tag, $function_to_add, $priority, $accepted_args);

Funktion 'add_filter' rekisteröi funktion, jonka nimi on annettu dollarin $ tag -suodattimen koukun $ function_to_add argumentille. Valinnainen argumentti - $ prioriteetti ja $ accepted_args - toimivat samalla tavalla kuin toimintokoukkuihin.

Osoitamme koko prosessia toiminnassa: yhteinen plugin-tehtävä on lisätä joitain sisältöä viestin loppuun. Jos katsomme lähemmäksi "the_content" -mallin tunnistetta ( queryposts.com/function/the_content ), jota tavallisesti käytetään viestin sisällön tuottamiseen teoksessa, havaitsemme, että se sisältää seuraavan suodattimen koukun:

$content = apply_filters('the_content', $content);

Tämän koukun avulla voimme helposti lisätä jotain viestin loppuun seuraavalla tavalla:

function msp_helloworld_post_footer($content) {$content .= "";return $content;}  add_filter ('the_content', 'msp_helloworld_post_footer', 100); 

Huomaa, että käytämme melko suurta numeroa täällä ensisijaisuuden varmistamiseksi, että kaikki oletussuodattimet on sovellettu ennen "msp_helloworld_post_footer". Kun koodi on sisällytetty plugin-tiedostoon, meidän pitäisi nähdä tulos sivustolla:

pfooter

Miten löytää koukut

Nyt on selvää, että toiminnan ja suodatustoimintojen toteuttamiseksi meidän on tiedettävä, mitä koukkuja on saatavilla.

WordPress Codex tarjoaa Toimintaohje useimmilla koukkuilla, jotka on vapautettu tyypillisestä sivun kuormituksesta ja a Suodatusohje luettelo yleisesti käytetyistä suodattimista. Nämä viitteet ovat hyödyllisiä, jotta voidaan ymmärtää toimien järjestys ja suodattimien logiikka, jotta voit valita, missä ja milloin toiminnallisuus voidaan ja pitäisi injektoida.

Tämän jälkeen olet valmis matkalle lähdekoodiin. Voit tehdä haun WordPress-tiedostoilla "do_action" ja "apply_filters" avainsanoilla löytääksesi tarvitsemasi koukun.

Ymmärtäminen WordPress-kyselylogiikka voi myös auttaa sinua selvittämään missä koukkuja voidaan etsiä.

Lopuksi voit viitata WordPress Hooks -tietokanta joka sisältää täydelliset tiedot ydintiedostojen koukkuista.

Lisätoiminnot koukkuilla

Sen lisäksi, että olet lisännyt pluginisi, toiminnot ja suodattimet voidaan poistaa samankaltaisella syntaksilla.

Toimet voidaan poistaa seuraavalla tavalla:

remove_action($tag, $function_to_remove, $priority, $accepted_args);remove_all_actions($tag, $priority);

Kuten olet luultavasti arvannut, 'remove_action' poistaa tietyn tietyn koukun rekisteröidyn toiminnon (sinun on oikein ilmoitettava prioriteetista ja argumenttien määrä, koska niitä käytettiin rekisteröintiin) ja 'remove_all_actions' auttaa poistamaan kaikki tietyt toiminnot rekisteröidyt toiminnot. koukku tietyllä prioriteetilla (jos prioriteetti argumentti jätetään pois, toiminto poistaa kaikki toiminnot).

Olet luultavasti kuullut suositusta turvallisuussuosituksesta piilottaaksesi WordPress-version sivuston pääosasta. Tämä on tehtävä "remove_action".

Ensin löydämme koodin, joka koukuttaa "wp_generator" -toiminnon tulostaaksesi version tiedot selaamalla /wp-includes/default-filters.php . Tämä koodi toimii seuraavasti:

add_action('wp_head', 'wp_generator');

Tämän koodin vaikutuksen eliminoimiseksi meidän pitäisi jossakin osassa pluginamme olla vastakkainen toiminto:

remove_action('wp_head', 'wp_generator');

Suodattimet voidaan poistaa samalla tavoin:

remove_filter($tag, $function_to_remove, $priority, $accepted_args);remove_all_filters($tag, $priority);

Plugin API Plugin API antaa kehittäjille myös keinon havaita, onko kyseinen koukku rekisteröityneet toimintoihin:

has_action($tag, $function_to_check);has_filter($tag, $function_to_check);

Molemmat toiminnot tarkistavat, onko jokin tietty toiminto tai suodatin rekisteröity koukkuun ja palauttaa: true on success, false on failed. Koukussa olevan toiminnon sisällä meillä on kyky tarkistaa, mikä koukku on lauennut sen suorituksen seuraavalla tavalla:

if('hook_to_check_name' === current_filter()){//do stuff related to 'hook_to_check_name' hook}

Nimestä huolimatta 'current_filter' toimii paitsi suodattimilla myös toimilla. Täydelliset Plugin API -toiminnot ovat Codex .

Todellinen maailma tapaus

Kaivaa plugin luuranko, johon olemme valmistautuneet sarjan edellinen osa , ja hengittää elämää siihen.

Täytämme "core.php" -tiedoston (keskeinen osa plugintamme, jonka tarkoitus on kantaa suurin osa toiminnallisuudesta) koodilla, joka ratkaisee reaalimaailman tehtävän toimien ja suodattimien avulla.

Mitä aiomme tehdä? Oletetaan, että WordPress-sivustosi hyväksyy eri tekijöiden vierailevia viestejä, mutta ei anna heille luvan luoda omia tilejä lähettämistä varten. Se tarkoittaa, että käyttäjä, joka on julkaissut artikkelin, ja sen todellinen kirjailija (vieras) ovat erilaisia ​​ihmisiä. Sinun on varmistettava, että varsinainen kirjoittaja saa luottoa. Tämä voidaan tehdä mukautetun taksonomian avulla.

Luomme a mukautettu taksonomia käsitellä vieraan kirjoittajan nimeä (terminä) ja lyhyt kirjailija bio (kuvaus). Voisimme antaa tekijöiden nimet kuin mihin tahansa muihin taksonomian termeihin (tunnisteiksi) virkoihin. Sen jälkeen on mahdollista lähettää kirjoittajan laatikko heti postin tekstin jälkeen. Tässä on koodi:

/** Hook plugin's action and filters **/function msp_helloworld_init(){add_action('init', 'msp_helloworld_taxonomies');add_filter('the_content', 'msp_helloworld_author_block_filter');add_filter('post_class', 'msp_helloworld_post_class');}add_action('plugins_loaded', 'msp_helloworld_init');/** Register custom taxonomy **/function msp_helloworld_taxonomies(){$args = array('labels' => array('name'          => 'Guest authors','singular_name' => 'Guest author'),'show_in_nav_menus' => false);register_taxonomy('gauthor', array('post'), $args);}  ($ Post-> ID, 'gauthor'); jos (tyhjä ($ author_terms)) paluu; $ name = liuskakuvakkeet (/ $ luo kirjoittajan merkin merkintä ** / funktio msp_helloworld_author_block () {global $ post; $ author_terms = wp_get_object_terms $ $ = {0} -> nimi); $ url = esc_url (get_term_link ($ author_terms [0])); $ desc = wp_filter_post_kses ($ author_terms [0] 
"; $ out. ="
Tämä on vieras viesti {$name}
"; $ out. ="
{$desc}
"; palauttaa $ out;} / ** Lisää tekijän ruutu viestin loppuun ** / funktio msp_helloworld_author_block_filter ($ content) {if (is_single ()) $ content. = msp_helloworld_author_block (); return $ content;} / * Lisää custom CSS-luokka postin konttiin ** / toiminto msp_helloworld_post_class ($ post_class) {global $ post; $ author_terms = wp_get_object_terms ($ post-> ID, 'gauthor'); jos (! Empty ($ author_terms) {$post_class[] = 'gauthor';} palaa $ post_class;}

Kuten näette, olemme luoneet toimenpiteen, jolla rekisteröidämme mukautetun taksonomian ja sovimme sen init-koukkuun - tämä on suositeltava käytäntö. Sen jälkeen olemme luoneet kirjoittaja-laatikon merkinnästä vastuussa olevan mallipohjan käyttämällä WordPress-toimintoja, kuten "wp_get_object_terms". Tämän jälkeen liitimme tämän ruutuun viestin loppuun käyttämällä 'the_content' suodatinkoukkua. Ja lopuksi olemme lisänneet mukautetun CSS-luokan vierasviestien konttiin tyylin joustavuuteen teemassa. Sovellettaessa joitain tyylejä voimme nähdä tuloksen:

gauthor

johtopäätös

Toimet ja suodattimet ovat tärkein osa WordPress-kehitystä. Nyt, kun ymmärrät niiden logiikan ja käyttäytymisen, olet valmis omia kokeiluja varten.

Napsauta tästä ladataksesi laajennetun "Hello World" -lisäosan esimerkkisi käyttämään luurankoa omaan kehitykseen.

Mitä käytätte WordPress-toiminnoille ja -suodattimille? Mitä haluaisit nähdä tämän sarjan seuraavassa osassa? Kerro meille kommentit.

Esittelykuva, Moduulikuva kautta Shutterstock