Akcione udice
WordPress udica je “parče” koda preko koga se ubacuje custom funkcija u deo koda gde je prethodno smeštena “udica”. Udica može biti ugradjena u bilo koji deo WordPress-a, u “core wordpress-a” ili u našu temu ili plugin…
Izvršavanje wordpress-ovog koda traje i ima svoj redosled, a pošto se “funkcije-udice” nalaze na različitim mestima u kodu to znači da se izvršavaju u različitim trenutcima na vremenskoj pravoj. Ova činjenica nam omogućava da aktiviramo našu custom funkciju iz functions.php u odredjenom trenutku. Tačno vreme startovanja naše fukcije zavisi od toga na koju smo se funkciju-udicu “zakačili”.
Ugradjene WP akcione udice
Ugradjene akcione udice su podeljene u više kategorija:
- Actions Run During a Typical Request
- Actions Run During an Admin Page Request
- Post, Page, Attachment, and Category Actions (Admin)
- Comment, Ping, and Trackback Actions
- Blogroll Actions
- Feed Actions
- Template Actions
- Administrative Actions
- Dashboard “Right Now” Widget Actions
Spisak svih WP akcionih-udica možete pogledati u codex-u ali takodje na sajtu adambrown.info, ali šta je okidač za
startovanje funkcije pogledajte u Code Reference.
Dodavanje nove akcione udice
Ukoliko vam je i pored priličnog broja postojećih akcionih-udica naophodna “udica” na nekom specijalnom mestu, to se izvodi sa stavljanjem do_action() funkcije u kod.
1 |
<?php do_action( $tag, $arg ); ?> |
Gde je:
- $tag ime nove udice
- $arg argument prosledjen udici (opcionalno)
“Kačenje” na udicu
“Kačenje” custom funkcije na akcionu-udicu se vrši koristeći funkciju add_action()
1 |
add_action( $hook, $function_to_add, $priority, $accepted_args ); |
- hook je udica za koju se kači naša funkcija
- $function_to_add predstavlja ime naše funkcije koju želimo da pokrenemo
zajedno sa akcionom-udicom - $priority predstavlja broj vezan za prioritet aktiviranja, koristi se u slučaju da ima više custom funkcija na istom mestu tj na istoj udici. Što je manji broj to se pre izvršava dodana funkcija. Default-na vrednost je 10.
- $accepted_args predstavlja broj parametara koji dolaze uz funkciju, npr.
function update_ post($a,$b) – tu imamo broj 2 jer se prosljeđuju dva parametra
Na sledećem primeru ćemo zakačiti custom funkciju ubaci_css_still() da se pokrene kad i funkcija
wp_head:
1 2 3 4 5 6 |
function ubaci_css_still() { $output="<style> .wp_head_example { background-color : #f1f1f1; } </style>"; echo $output; } add_action('wp_head','ubaci_css_still'); |
Razlog što smo funkciju ubaci_css_still smo zakačili udicom za funkciju wp_head(),
jeste što se njen kod najčešćé stavlja ispred </head> taga, a to je i mesto gde treba da se
pojavi naša funkcija.
“Skidanje” sa udice
1 |
remove_action($tag, $function_to_remove, $priority); |
Gde je:
- $tag ime “akcione-udice”
- $function_to_remove ime povezane custom funkcije na udicu koja treba da se otkači
Filterske udice
“Filterske udice” su funkcije kroz koje je wordpress omogućio da se menjaju podaci. Filterska-udica našoj custom funkciji uvek prosledi neki parametar, a iz toga sledi da naša custom funkcija mora uvek da vrati neku vrednost tj. mora da ima return naredbu.
Filteri mogu da omoguće promenu podataka u trenutku pre nego što se učita strana tj. da se promena izvrši nakon što su podaci izašli iz baze a nisu još stigli do browsera. Takodje filteri omogućavaju promenu podataka i kada je obrnut proces tj. kada podaci idu ka bazi (npr. kada se dodaju novi postovi ili komentari). Pa se zbog toga kaže da:
” Filterske udice tzv. filteri stoje izmedju baze i browsera “
Ugradjene WP filterske udice
Filter udice su takodje podeljene na kategorije:
- Post, Page, and Attachment (Upload) Filters
- Comment, Trackback, and Ping Filters
- Category and Term Filters
- Link Filters
- Date and Time Filters
- Author and User Filters
- Blogroll Filters
- Blog Information and Option Filters
- General Text Filters
- Administrative Filters
- Rich Text Editor Filters
- Template Filters
- Registration & Login Filters
- Redirect/Rewrite Filters
- WP_Query Filters
- Media Filters
- Advanced WordPress Filters
- Widgets
- Admin Bar
Dodavanje novih filter-udica
1 |
apply_filters( $tag, $value, $var ... ); |
Gde je:
- $tag ime nove filterske udice
- $value vrednost ili cela funkcija koja se može menjati preko neke filter-funkcije
- $var dodatne vrednosti koje treba proslediti (opcionalno) nekoj custom funkciji
Spisak svih filterskih udica možer te pogledati na sajtu adambrown.info
“Kačenje “na udicu
Funkcija add_filter() izdaje naredbu da se neka custom funkcija unutar plugin-a ili teme zakači za “filter-udicu”. Ključna razlika između akcione-udice i filterske-udice je da prva služi za izvršavanje nekih custom funkcija a filterska-udica za manipulaciju podacima koristeći custom funkciju.
Naredba koja se izdaje custom funkciji da se zakači za “filter udicu” je:
1 |
add_filter($hook, $function_to_add, $priority, $accepted_args); |
- hook je funkcija za koju se kači naš filter
- $function_to_add predstavlja ime naše funkcije koju želimo da pokrenemo
zajedno sa filter-udicom - $priority predstavlja broj vezan za prioritet aktiviranja, koristi se u slučaju da ima više custom funkcija na istom mestu tj na istoj udici. Što je manji broj to se pre izvršava dodana funkcija. Default-na vrednost je 10.
- $accepted_args predstavlja broj parametara koji dolaze uz funkciju, npr.
function update_ post($a,$b) – tu imamo broj 2 jer se prosljeđuju dva parametra
“Skidanje” sa udice
1 |
remove_filter($tag, $function_to_remove, $priority); |
Gde je:
- $tag ime “udice sa koje treba da se “otkači”
- $function_to_remove ime custom funkcije koja treba da se otkači.
Primer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
function lista_voca() { $niz_voca = array( 'jabuke', 'narandze', 'limun', 'borovnice', 'breskve', 'dinje' ); $list = '<ul>'; foreach($niz_voca as $vocka) : $list .= '<li>' . $vocka . '</li>'; endforeach; $list .= '</ul>'; return $list; } |
Prethodna funkcija vraća “unoredered” listu od različitog voća. Pa ukoliko dodamo kod za štampanje funkcije:
1 |
echo lista_voca(); |
Ištampaće se sledeći HTML kod:
1 2 3 4 5 6 7 8 |
<ul> <li>jabuke</li> <li>narandze</li> <li>limun</li> <li>borovnice</li> <li>breskve</li> <li>dinje</li> </ul> |
Ako želimo da modifikujemo listu voća moramo da dodamo novu “filter-udicu” unutar koda:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
function lista_voca() { $niz_voca = array( 'jabuke', 'narandze', 'limun', 'borovnice', 'breskve', 'dinje' ); $list = '<ul>'; <strong>$niz_voca = apply_filters('voce_filter_udica', $niz_voca);</strong> foreach($niz_voca as $vocka) : $list .= '<li>' . $vocka . '</li>'; endforeach; $list .= '</ul>'; return $list; } |
Sa ovim dodatim kodom je napravljena nova filter-udica pod nazivom ‘voce_filter_udica’ koja prosledjuje za menjanje $niz_voca kao parametar.
Dodavanje novog voća je sada lako jer ćemo da napravimo novu custom funkciju dodavanje_voca_na_listu koja će promeniti prosledjeni parametar ‘$niz_voca’ na mestu filter-udice.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function dodavanje_voca_na_listu($niz_voca) { // the $niz_voca parameter is an array of all voce from the lista_voca() function $extra_voce = array( 'sljive', 'tresnje', 'mandarine', 'lubenice' ); // combine the two arrays $niz_voca = array_merge($extra_voce, $niz_voca); return $niz_voca; } add_filter('voce_filter_udica', 'dodavanje_voca_na_listu'); |