Uvod

WordPress shortcode na nekoj stranici ili postu će biti zamenjen sa nekim sadržajem, a proces koji se u pozadini desio je sledeći:

Kada WordPress “naleti” na shortcode njemu se daje instrukcija da potraži makro izmadju zagrada [ ], zatim makro pozove callback funkciju koja će zameniti shortcode sa nekim dinamičkim sadržajem.

Omogućiti shortcode svuda

Po defaultu WordPress ignoriše shortcode ako ga nadje na nekom drugom mestu a da to nije deo gde se unosi sadržaj posta ili strane. Da bi aktivirali shortcode i u drugim oblastima potrebno je dodati adekvatni filter u functions.php

Shortcode u widget-u

Sada je dovoljno staviti shortcode u običan Text widget a njega u oblast koju želite da bi se prikazao sadržaj shortcode.

Shortcode u komentarima

Shortcode u excerpt-e

Shortcode u oviru teme

Ukoliko iz nekog razloga želimo da ubacimo shortcode unutar nekog šablona ili plugin-a, npr. “custom page template” koristimo funkciju do_shortcode( $content )

Primer

Na mesto unutar koda gde želimo da se pojavi shortcode dodamo sledeći kod:

Primer

Ako je shortcode sa otvarajućim i zatvarajućim tag-om:

Primer

Da bi dodelili nekoj promenjivoj ono što vraća shortcode:

Jednostavni shortcode

Pravljenje shortcode

Postupak ima sledeći tok:

  1. Napravi callback funkciju koja će biti pozvana kada eordpres “naleti” na shortcode
  2. Registruj shortcode dajući mu jedinstveno ime
  3. Kačenje na akcionu udicu

Callback funkcija

Ova funkcija daje ono za šta je shortcode namenjen, u sledećem primeru shortcode traba da “izbaci” naslov svih postova koji su napisani od stane autora “admin”:

NAPOMENA:
Krajnji “proizvod” shortcode je text obično izmedju HTML tagova, da bi se prikazao u browser-u koristite return “string” a izbegavajte funkciju echo. Više o ovome pogledajte u delu članka pod nazivom “Štampanje HTML sa shortcode”.

Registrovanje shortcode

Registrovanje se vrši sa funkcijom add_shortcode()

  • $tag – (string) (required) ime shortcode tag-a unutar zagrada [ ]
  • $func – (required) Calback funkcija koja se poziva kad wordpress naleti na shortcode

Kačenje na udicu

Pozivanje shortcode

Sada je omogućeno da autor članaka kad god ima potrebu za listanjem svih svojih postova samo ubaci shortcode [spisak_postova] u bilo koji deo posta ili statične stranice. Ova lista će se dinamički ažurirati zahvaljujući php kodu u pozadini.

Shortcode sa parametrima

Uvod

Pri “pravljenju” shortcode sa parametrima se koriste sledeće funkcije:

  • shortcode_atts() – wordpress funkcija
  • extract() – PHP funkcija

shortcode_atts()

Ova funkcija omogućava da neki niz parova parametar/default_vrednost može da se koristi unutar shortcode (tj. izmedju zagrada [ ] ).

  • $pairs – (required) niz parova tipa key/value (gde su value default-ne vrednosti)
  • atts – (required) naziv promenjive pod kojim će imenom se koristiti niz unutar shortcode tag-a
  • $shortcode – (string) (optional) naziv shortcode-a koji će biti korišćen
Primer

U ovome primeru funkcija pravi niz parova $atts koji je “povezan” sa nazivom shortcode u zagradama [spisak_postova]:
br_postova => 1
pisac => ‘admin’

extract()

Medjutim prethodno dobijeni niz (key/vrednost) mora da se “prevede” u promenjive sa pridruženim defaultnim vrednostima.
Za ovaj posao se koristi funkcija extract(). Promenjive dobijaju naziv $key i svakoj se pridružuje defaultna vrednost. Za potrebe shortcode-a ova se funkcija koristi u najlakšem obliku i kao atribut prihvata samo niz koji treba da se promeni.

Primer

Ako uzmemo da je niz koji ova funkcija treba da obradi niz iz prošlog primera, onda:

Nakon obrade ova funkcija je napravila (iako se to nigde ne vidi) niz od promenjivih kojima su pridodate vrednosti, kada bi se štampao niz bi izgledao ovako:
$br_postova = 1
$pisac = ‘admin’

Callback funkcija

Ako želim da shortcode prikaže odredjeni broj naslova članaka od odredjenog pisca članaka.

Registrovanje i kačenje na udicu je potuno isto kao u prethodnom primeru:

Pozivanje shortcode

Pošto smo definisali defaultne vrednosti ovaj kod će da radi i bez dodatno ubačenih parametara, što znači da će kod:

prikazati jedan članak (defaultna vrednost $br_postova=1) od autora teksta sa nazivom ‘admin’ (defaultni $pisac je admin)

Sada korisnik može da izabere pisca članaka kao i broj naslova poslova koji će se prikazati na jednoj strani:

Content in shortcode

Ako želimo da ubacimo tekst pre liste članaka iz prethodnih primera, potrebno je unutar callback funkcije dodati promenjivu na mestu gde želimo da se pojavi, ali takodje moramo da je stavimo kao parametar koji se prosledjuje funkciji iz shortcoda.

Pozivanje shortcode

Sadržaj koji se prosledjuje preko shortcode se stavlja izmedju otvarajućeg i zatvarajućeg taga shortcode kao na sledećem primeru:

Rezultat ovoga koda je isti kao u prethodnim primerima stim što sada iznad liste ima upisani tekst koji stilizovan kao naslov h2.

Štampanje HTML-a sa shortcode

Objašnjenje problema

Kada autor članka koristi shortcode uglavnom očekuje da mu shortcode vrati neki tekst. Taj tekst callback funkcija daje browser-u kao HTML. Pri pisanju callback funkcije treba koristiti return string promenjive a izbegavati funkciju echo. Tekst štampan sa echo može da se pojavi na mestu gde nismo planirali, jer šalje tekst direktno na stranicu bez obzira na funkciju u kojoj se nalazi. Echo štampa čim php “dodje” do nje i ne čeka da se funkcija u kojoj se nalazi završi, dok return vraća string i ukida funkciju! Možda se bolje shvati na sledećim primerima:

Primer (echo)

Primer (return & echo)

Evo šta o ovome kažu na oficijelnoj stranici:

“Note that the function called by the shortcode should never produce output of any kind. Shortcode functions should return the text that is to be used to replace the shortcode. Producing the output directly will lead to unexpected results.

Štampanje sa return ‘string’

Da bi sakupili sav HTML kod koji shortcode treba da pošalje browser-u, postoje dva pristupa:

Konkatenacija string-a

Jedan od načina za “skupljanje” svog HTML-a u jednu promenjivu je konkatenacija (srp.lepljenje).

ob_start()

Ova funkcija se korisiti u paru sa suplementarnom funkcijom ob_get_clean(). Od trenutka kada se stavi u kod pa na dalje ona u sebe skuplja svaki HTML kod kao i sve ono što PHP štampa sa nekom od funkcija za prikazivanje na ekranu. Kada u kodu “naleti” na funkciju ob_get_clean() prekine sa skupljanjem i sve preda toj funkciji.

“Start remembering everything that would normally be outputted, but don’t quite do anything with it yet.”

Primer

$var promenjiva koja je na kraju sačuvala ceo baffer sada ima vrednost:

Primer

Ovaj primer je isti kao u delu poda nazivom “Content in shortcode” ali umesto konkatanacije stinga se koristi ob_start() i ob_get_clean() funkcije:

Sakrivanje ukinutih shortcode

U slučaju da korisnik promeni temu u kojoj je koristio shortcode, nova tema ih neće prepoznati kao shortcode pa će ih ignorisati tj. ponašaće se prema njima kao da su običan tekst i štampaće ih tako. Brisanje svakog “pokvarenog” shortcode možemo da uradimo:

  • ručno tj. da se otvori svaki post gde je korišćen shortcode i obriše.
  • dodavanjem koda u functions.php nove teme:

    na mestu ‘shortcode_tag’ treba ubaciti ime svakog pojedinačnog shortcode koji želimo da ukinemo
Podelite:

Ostavite komentar