Í fyrri hluti röð okkar við stofnaði grunninn fyrir WordPress tappi sem er þekktur af kjarna. Í dag ætlum við að læra hvernig á að breyta sjálfgefna virkni kjarnains.

Hugtakið krókar, aðgerðir og síur ber ábyrgð á því; að vera hið raunverulega hjarta allra WordPress viðbætur kerfisins.

Allt byrjar frá "krókunum" sem kjarnainn leggur.

Hvað er "krókur"? Það er sérstaklega merktur staður í kóðanum (af hvaða handriti), þar sem einhver er vísvitandi skráð - "heklaður" - aðgerðir geta verið framkvæmdar í þeirri röð sem skilgreind er við skráningu.

WordPress hefur tvær tegundir af krókum sem eru mismunandi í tilgangi þeirra:

  • Aðgerðarkallur: Markar staðinn til að framkvæma aðgerð, til dæmis, vinna úr inntaki og geyma niðurstöður í gagnagrunni
  • Sía krókur: merkir staðinn til að beita breytingu á gildi (venjulega gefinn upp sem breytu), þannig að eftirfarandi kóði mun nota stillt gildi

Skulum kafa inn í smáatriði ...

Vinna með aðgerðir

The sameiginlegur rökfræði af WordPress aðgerðir er mjög einfalt:

  1. Merktu staðinn þar sem sérsniðin kóði ætti að fara með "aðgerðarkrokka" og breytur þess
  2. Búðu til aðgerðaaðgerðina sem framkvæmir nýja kóðann með því að nota (ef þörf er á) breytur sem krókinn gefur til kynna
  3. Skráðu aðgerðina (# 2) til að framkvæma þegar krókinn (# 1) er rekinn með einhverjum forgangi
  4. Þegar WordPress hleður inn beiðni og finnur krókinn, mun það leita að öllum aðgerðum "krók inn" og framkvæma þau eitt í einu í samræmi við forgang þeirra

Til að framkvæma verkefni # 1 höfum við aðgerðina 'do_action':

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

Það tekur við eftirfarandi breytur: $ tag - krókinn "nafn" sem hjálpar til við að bera kennsl á tiltekna krókinn og greina það meðal annarra; $ arg_1, $ arg_2, ..., $ arg_n - gildi fyrir aðgerðir til að samþykkja sem breytur. Það gæti verið eins mörg rök eins og þörf er á - frá núlli upp á hæfilegan upphæð.

WordPress sjálft hefur mikið af fyrirfram ákveðnum krókum til að nota:

do_action( 'init' );

Þetta er mjög einfalt mál án viðbótar breytur. Þessi krókur er rekinn þegar mest af WordPress er sett upp og tími er kominn til að skrá sérsniðna hluti, eins og sérsniðin póstgerð, til dæmis.

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

Í þessu dæmi er krókinn rekinn þegar póstur er vistaður og gefur tvo viðbótarbreytur til að starfa með - post_id og eftir hlut sem inniheldur öll gögn frá vistuðu færslunni.

En að búa til krókar er ekki aðeins forréttindi kjarnahópsins; Sérhver verktaki getur búið til sérsniðna krók fyrir tappi (eða þema). Þökk sé þessu höfum við mikið af krafti, til dæmis, þema ramma leyfa barn þemum að breyta ekki aðeins stíll en jafnvel markup foreldra án þess að skrifa allan skrár.

do_action( 'my_truly_custom_hook' );

Þegar við höfum fundið (eða búið til) rétta krók og búið til sérsniðna aðgerð fyrir það ættum við að skrá nýjustu fyrir framkvæmdina með 'add_action'.

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

Eins og búast má við að aðferðin 'add_action' samþykkir tvær nauðsynlegar breytur: $ tag: heiti viðeigandi krók og $ function_to_add: heiti aðgerðarinnar sem á að framkvæma. Hinar tvær breytur eru valfrjálsar: $ forgang: heiltala til að tilgreina röðina þar sem skráðar aðgerðir eru framkvæmdar (sjálfgefið 10), $ accepted_args_number: fjöldi röksemda sem skráða aðgerðin tekur að samþykkja (sjálfgefið 1) .

Við skulum skoða dæmi til að lýsa öllu ferlinu. Segjum að við viljum bæta við smá tilkynningu neðst á síðunni okkar. Við gætum notað "wp_footer" krókinn fyrir þetta vegna þess að það er hluti af skyldubundnu færibandi sem hvert þema ætti að innihalda.

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

Í þessu dæmi búa við fyrirfram skilgreind aðgerð sem einfaldlega skilar merkingu tilkynningarinnar (mikilvægi forskeyta sem við höfum rætt í fyrri greinin , vinsamlegast vinsamlegast vísa til þess til að fá nánari upplýsingar) og hakaðu því á 'wp_footer'. Þegar við höfum sett þennan kóða í tappi skrá okkar (einnig fjallað um í fyrri greininni) munum við sjá afleiðingarnar á síðunni.

cnotice

Vinna með síum

Síur starfa með sömu rökfræði og aðgerðir. Eini munurinn er sá að þeir framkvæma ekki aðeins kóðann á ákveðnum stað. Þeir framkvæma þennan kóða til að breyta einhverju gildi sem þeim er gefið með króknum. Þetta þýðir að sérhvert sía krókur hefur tengda gildi (í flestum tilvikum borið með breytu).

Aðgerðin sem framkvæmir síun ætti að taka þetta gildi, breyta því einhvern veginn og þá skila því til frekari notkunar. Svo að setningafræði aðgerða sem bera ábyrgð á krókum og síum er svolítið öðruvísi.

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

Aðgerðin 'apply_filter' býr til síu krók með $ heiti tagi og skyldubundin breytu $ value_to_filter (það gæti verið tómt, en ætti að vera til staðar fyrir bestu æfingar). Önnur rök eru valfrjálst og vinna eins og fyrir aðgerðir.

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

Þetta er beinagrindur síunaraðgerðar sem sýnir að það ætti a) að samþykkja að minnsta kosti eitt rök, gildi breytinga; og b) skilaðu gildi í lok.

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

Aðgerðin 'add_filter' skráir aðgerð með nafni sem gefið er upp sem $ aðgerðin til að skila röksemdafærslunni fyrir $ tag sía krókinn. Valfrjálst rök - $ forgang og $ accepted_args - virka á sama hátt og fyrir aðgerðarkrokka.

Leyfðu okkur að sýna fram á allt ferlið í aðgerð: Algengt viðbótarverkefni er að bæta við einhverju efni í lok pósts. Ef við skoðum nánar á 'the_content' sniðmát merki ( queryposts.com/function/the_content ), sem venjulega er notað til að framleiða efni í færslu í þema, munum við komast að því að það inniheldur eftirfarandi síu krók:

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

Með því að nota þennan krók getum við auðveldlega bætt við eitthvað í lok póstsins á eftirfarandi hátt:

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

Vinsamlegast athugaðu að við notum töluvert stórt númer fyrir forgang hér til að tryggja að öll sjálfgefin sía hafi verið sótt fyrir 'msp_helloworld_post_footer' okkar. Eftir að kóðinn er innifalinn í skránni í viðbótinni ættum við að sjá niðurstöðurnar á síðunni:

pfooter

Hvernig á að finna krókar

Það ætti að vera augljóst að nú þegar við gerum ráð fyrir aðgerðum og síum virkni þurfum við að vita hvaða krókar eru í boði.

The WordPress Codex veitir Aðgerð Tilvísun með flestum aðgerðum krókum rekinn á dæmigerða síðu álag og a Sía Tilvísun með lista yfir algengar síur. Þessar tilvísanir eru gagnlegar til að skilja röð aðgerða og rökfræði filters svo að þú getir valið hvar og hvenær virkni getur og ætti að vera sprautað.

Eftir það ertu tilbúinn fyrir ferðina í upprunakóðann. Þú getur bara framkvæmt leit í gegnum WordPress skrár fyrir leitarorðið 'do_action' og 'apply_filter' til að finna krókinn sem þú þarft.

Skilningur WordPress fyrirspurn rökfræði gæti einnig hjálpað þér að vinna út þar sem hægt er að leita að krókum.

Að lokum getur þú átt við WordPress Hooks Database sem inniheldur allar upplýsingar um krókana í kjarnaskrám.

Ítarlegri aðgerðir með krókum

Auk þess að bæta við tappi þínu geturðu einnig fjarlægja aðgerðir og síur með svipuðum setningafræði.

Aðgerðir geta verið fjarlægðar á eftirfarandi hátt:

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

Eins og þú hefur sennilega giskað 'fjarlægð_action' fjarlægir tiltekna aðgerð sem er skráð fyrir tiltekna krók (þú verður að tilgreina rétt forgang og fjölda röksagna eins og þau voru notuð við skráningu) og 'remove_all_actions' hjálpar til við að fjarlægja allar aðgerðir sem skráðir eru með ákveðnum krók með tilteknum forgangi (ef forgangsröðin er sleppt fellur aðgerðin úr öllum aðgerðum).

Þú hefur sennilega heyrt um vinsæl öryggisráðlegg til að fela WordPress útgáfuna frá höfuðhlutanum á síðunni. Þetta er starf fyrir 'remove_action'.

Fyrst af öllu, finnum kóðann sem krókar 'wp_generator' fallið til að prenta útgáfuupplýsingarnar með því að vafra /wp-includes/default-filters.php . Kóðinn sem gerir þetta lítur út sem hér segir:

add_action('wp_head', 'wp_generator');

Til að útrýma áhrifum þessa kóða ættum við einhvers staðar í tappi okkar, þar á meðal hið gagnstæða virka:

remove_action('wp_head', 'wp_generator');

Síur geta verið fjarlægðir á svipaðan hátt:

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

The Forritaskil veitir verktaki einnig leið til að greina hvort tiltekinn krókur hefur skráð aðgerðir til að framkvæma:

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

Báðar aðgerðir athuga hvort tiltekin aðgerð eða sía er skráð í krók og skilar: Sannur í velgengni, ósatt við bilun. Inni í hekluðum aðgerðum höfum við getu til að athuga hvaða krókur hefur kallað fram framkvæmd hennar á eftirfarandi hátt:

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

Þrátt fyrir nafnið, virkar 'current_filter' ekki aðeins með síum heldur einnig með aðgerðum. Fyrir fullt sett af Plugin API aðgerðir, vísa til Codex .

Raunveruleg tilfelli

Leyfðu okkur að grafa upp tappi beinagrindina sem við undirbúið fyrri hluti röðarinnar , og anda lífið í það.

Við erum að fara að fylla út í 'core.php' skrána (miðhlutinn af tappi okkar sem ætlað er að ná sem mestum árangri) með kóðanum sem leysir raunverulegt verkefni með hjálp aðgerða og sía.

Hvað eigum við að gera? Segjum sem svo að WordPress-síða þín taki gestaskilaboð frá mismunandi höfundum en leyfir þeim ekki að búa til eigin reikninga til að birta þær. Það þýðir að notandinn, sem hefur birt greinina, og raunverulega höfundur þess (gesturinn) eru öðruvísi. Þú þarft að tryggja að raunverulegir höfundar fái kredit. Þetta er hægt að gera með sérsniðnum flokkun.

Leyfðu okkur að búa til sérsniðin flokkun að takast á við nafn höfundar höfundarins (sem hugtak) og líffræðilega stutt höfundar (sem lýsingu). Við gætum úthlutað höfundum nöfnum sem skilmálum annarra hagkerfisins (sem merkingar) við færslur. Eftir það verður hægt að framleiða kassa höfundar rétt eftir texta færslunnar. Hér er kóðinn:

/** 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);}  / ** Búa til rásarmerki höfundar ** / virka msp_helloworld_author_block () {global $ post; $ author_terms = wp_get_object_terms ($ post-> ID, 'gauthor'); ef (tómt ($ author_terms)) aftur; $ name = stripslashes $ author_terms [0] -> nafn); $ url = esc_url (get_term_link ($ author_terms [0]); $ desc = wp_filter_post_kses ($ author_terms [0] -> lýsing); $ out = " 
"; $ út. ="
Þetta er gestur eftir {$name}
"; $ út. ="
{$desc}
"; skila $ út;} / ** Bæta við höfundarreit til loka póstsins ** / virka msp_helloworld_author_block_filter ($ innihald) {ef (is_single ()) $ efni. = msp_helloworld_author_block (); skila $ efni;} / * * Bæta við sérsniðnum CSS flokki í ílát póstsins ** / virka msp_helloworld_post_class ($ post_class) {Global $ post; $ author_terms = wp_get_object_terms ($ post-> ID, 'gauthor'); ef (! Tómt ($ author_terms)) {$post_class[] = 'gauthor';} skilaðu $ post_class;}

Eins og þú sérð höfum við búið til aðgerð til að skrá sérsniðin flokkun og beittu því að "init" króknum - þetta er mælt með æfingum. Eftir það höfum við búið til sniðmátið sem ber ábyrgð á merkingu höfundarhússins með því að nota innfæddur WordPress aðgerðir eins og 'wp_get_object_terms'. Eftir það festum við þennan reit til loka efnisins með því að nota "the_content" sía krókinn. Og að lokum höfum við bætt við sérsniðnu CSS bekknum fyrir ílát gestapóstanna til að búa til sveigjanleika í þema. Eftir að hafa sótt um nokkrar stíll getum við séð niðurstöðuna:

gauthor

Niðurstaða

Aðgerðir og síur eru mikilvægasti hluti af hvaða WordPress þróun. Nú þegar þú skilur rökfræði og hegðun ertu tilbúinn fyrir eigin tilraunir.

Smelltu hér til að hlaða niður útbreiddum "Hello World" tappi dæmi til að nota sem beinagrind til eigin þróunar.

Hvaða notar hefur þú fundið fyrir WordPress aðgerðir og síur? Hvað viltu sjá í næsta hluta þessa röð? Láttu okkur vita í athugasemdunum.

Valin mynd, Module mynd um Shutterstock