Multiple coduri scurte cu o singură funcție Exemple 3 de ucigaș

API-ul puternic Shortcode API ne permite să creăm "fragmente" și să includem conținuturi speciale (cum ar fi funcții PHP sau cod HTML complex) în postările noastre. Este extrem de comun să construiți funcții separate pentru fiecare cod scurt, dar este cu adevărat necesar? În acest post, vom vedea cum putem utiliza mai mult de un cod scurt prin construirea unei singure funcții.


În apărarea codurilor scurte

API-urile fac din WordPress unul dintre cele mai flexibile sisteme de management al conținutului din toate. Acestea sunt motivul pentru care există zeci de mii de pluginuri și teme acolo: Comunitatea imensă a WordPress este capabilă să facă WordPress să facă backflips și cartwheels, datorită API-urilor WordPress.

Printre aceste API-uri, preferatul meu este API-ul Shortcode. Logica și validitatea ei sunt interogate dar cred cu tărie că utilizarea codurilor scurte în WordPress are o curbă ușoară de învățare și odată ce sunt învățate acele câteva reguli ușoare despre parametri și etichete de deschidere / închidere, chiar și utilizatorii începători se pot bucura de utilizarea codurilor scurte. Corect, nu este WYSIWYG, dar un începător WordPress poate avea mai mult timp pentru a șterge mizeria dacă au făcut ceva greșit într-un editor WYSIWYG și au ruinat codul HTML. Este mai ușor să vedeți că codul scurt nu funcționează, ștergeți-l și tastați-l din nou.

Dar, desigur, este doar o opinie a mea. Să ne întoarcem la subiect: construim mai multe coduri scurte cu o singură funcție!


Beneficiul acestei tehnici

Nu este cu adevărat necesar să se argumenteze beneficiul acestei metode - luați în considerare acest exemplu ridicol de lung:

 "," ultimul "=>"), $ atts)); dacă ($ class! = ") $ class =". clasa $; dacă ($ last = 'yes') $ last_class = 'ultimul'; întoarcere '
". do_shortcode (conținut $). '
„; add_shortcode ('one_half', 'one_half_sc'); funcția one_third_sc ($ atts, $ content = null, $ tag) extract (shortcode_atts (array (// clase suplimentare 'class' => ',' last '=>); dacă ($ class! = ") $ class =". clasa $; dacă ($ last = 'yes') $ last_class = 'ultimul'; întoarcere '
". do_shortcode (conținut $). '
„; add_shortcode ('one_third', 'one_third_sc'); funcția one_quarter_sc ($ atts, $ content = null, $ tag) extras (shortcode_atts (array (// clase suplimentare 'class' => ',' last '=>); dacă ($ class! = ") $ class =". clasa $; dacă ($ last = 'yes') $ last_class = 'ultimul'; întoarcere '
". do_shortcode (conținut $). '
„; add_shortcode ('one_quarter', 'one_quarter_sc'); funcția two_thirds_sc ($ atts, $ content = null, $ tag) extras (shortcode_atts (array (// clase suplimentare 'class' => ',' last '=>), $ atts); dacă ($ class! = ") $ class =". clasa $; dacă ($ last = 'yes') $ last_class = 'ultimul'; întoarcere '
". do_shortcode (conținut $). '
„; add_shortcode ('two_thirds', 'two_thirds_sc'); funcția three_quarters_sc ($ atts, $ content = null, $ tag) extras (shortcode_atts (array (// clase suplimentare 'class' => ',' last '=>); dacă ($ class! = ") $ class =". clasa $; dacă ($ last = 'yes') $ last_class = 'ultimul'; întoarcere '
". do_shortcode (conținut $). '
„; add_shortcode ("trei_grupe", "trei_grupe_sc"); ?>

Același cod (atât PHP și HTML) este folosit în mod repetat în fiecare funcție - cu excepția claselor CSS diferite. În plus, atributele fiecărei funcții sunt aceleași ca în celelalte funcții. E greu de citit. Vino să ne gândim la asta, dacă ar fi trebuit să schimbăm o caracteristică a acestei coloane divs, ar trebui să schimbăm aceleași părți în toate funcțiile.

Ce se întâmplă dacă ar exista o variabilă pentru a prelua "eticheta" codului scurt? Nu atât de surprinzător, variabila este apelată $ tag-ul și ar putea fi folosit în interiorul funcțiilor noastre. Permite funcțiilor noastre să verifice eticheta codului scurt și să se comporte în funcție de etichetă.

Gândiți-vă la exemplul de mai sus: Dacă există mai multe funcții care servesc aproape aceeași funcționalitate, ar fi logic (și destul de rece) să avem o funcție pentru utilizarea codurilor scurte.

Am prezentat trei exemple bune despre modul în care putem folosi această tehnică. Dacă vă puteți gândi mai mult la citirea postului, sunteți binevenit să vă împărtășiți gândurile cu ceilalți în secțiunea de comentarii de mai jos!


Exemplul 1 Încorporare video

Într-una dintre cele mai vechi mesaje pe Wptuts +, i-am explicat cum să folosești un scurtcod pentru a încorpora videoclipuri de la diferite gazde video cum ar fi YouTube, Vimeo și Dailymotion. Codul arăta astfel:

  ($ site == "youtube") $ src = '', '' '=' ($ site == "vimeo") $ src = 'http://player.vimeo.com/video/'. $ id; altfel dacă ($ site == "dailymotion") $ src = 'http://www.dailymotion.com/embed/video/' $ id; altfel dacă ($ site == "yahoo" ) $ src = 'http://d.yimg.com/nl/vyc/site/player.html#vid=' $ id; altfel dacă ($ site == "bliptv") $ src = ' http://a.blip.tv/scripts/shoggplayer.html#file=http://blip.tv/rss/flash/ '. $ id; altceva dacă ($ site == "veoh") $ src = "http://www.veoh.com/static/swf/veoh/SPL.swf?videoAutoPlay=0&permalinkId=". $ id; altul dacă ($ site == "viddler") $ src = 'http: //www.viddler.com/simple/ '. $ id; dacă ($ id! = ") return'„;  add_shortcode ('vid', 'vid_sc'); ?>

În timp ce este încă o practică nu-așa-rău (cu excepția celor 6 altfel dacă declarații), putem folosi acum un atribut mai puțin ("teren') și să creeze coduri scurte separate, cum ar fi:

 "," w "=> '600', 'h' => '370'), $ atts)), switch ($ tag) case" youtube ": $ src = 'http: //www.youtube-nocookie .com / embed / '; break; case "vimeo": $ src =' http://player.vimeo.com/video/ '; pauză; caz "viddler": $ src =' http: //www.viddler . $ src = 'http://www.dailymotion.com/embed/video/'; break; dacă ($ id! = ") return"„; întoarcere;  add_shortcode ("youtube", "wptuts_embed_sc"); add_shortcode ('vimeo', 'wptuts_embed_sc'); add_shortcode ('viddler', 'wptuts_embed_sc'); add_shortcode ("dailymotion", "wptuts_embed_sc"); ?>

Vezi ce am făcut? Am oferit a $ tag-ul parametru pentru funcția noastră în prima linie (pentru a înlocui funcția "teren") și a utilizat a intrerupator declarație condiționată (de dragul unui cod mai bun, mai curat). Rezultatul pentru cele două funcții va fi același, cu excepția cazului în care le puteți utiliza [Youtube] in loc de [vezi site = "youtube"] acum.

(Nu am folosit unele gazde video în a doua funcție.Dacă aveți nevoie pentru a adăuga mai multe gazde, puteți adăuga cât mai multe "cazcum doriți.)


Exemplul 2 Coloană divs

Ah, coloane ... ele sunt cea mai importantă parte a unei rețele CSS și ele fac foarte ușor pentru a face site-ul dvs. mai adaptabil, dacă acestea suportă tehnici de design receptive. Le puteți vedea în aproape orice temă WordPress de pe ThemeForest și folosesc coduri scurte ... cu o practică precum "exemplul nostru ridicol de lung" la începutul acestui tutorial.

După cum vă amintiți, codul a fost aproape același în toate cele 5 funcții din exemplul respectiv. Astfel, ar fi incredibil de ușor să le îmbinați într-o singură funcție și lăsați-o $ tag-ul muncă variabilă magia ei:

 "), $ atts)); dacă ($ class! =") $ class = ". $ class; $ last ="; // verificați eticheta de cod scurt pentru a adăuga o clasă "last" dacă (strpos ($ tag, '_last')! == false) $ tag = str_replace ('_last', 'last', $ tag); $ output = '
". do_shortcode (conținut $). '
„; returnați outputul $; add_shortcode ('one_half', 'wptuts_columns_sc'); add_shortcode ('one_half_last', 'wptuts_columns_sc'); add_shortcode ('one_third', 'wptuts_columns_sc'); add_shortcode ('one_third_last', 'wptuts_columns_sc'); add_shortcode ('one_quarter', 'wptuts_columns_sc'); add_shortcode ('one_quarter_last', 'wptuts_columns_sc'); add_shortcode ('two_thirds', 'wptuts_columns_sc'); add_shortcode ('two_thirds_last', 'wptuts_columns_sc'); add_shortcode ("trei sferturi", "wptuts_columns_sc"); add_shortcode ('three_quarters_last', 'wptuts_columns_sc'); ?>

Destul de curat, nu? Nici măcar nu am nevoie să folosim a intrerupator!

Încă vom duplica liniile în timp ce adăugăm codurile scurte. Îndrăzniți să faceți un pas mai departe? Scoateți add_shortcode () linii pentru a le înlocui cu aceasta:

 

Acum avem un cod și mai ușor de întreținut. De exemplu; dacă vom schimba numele funcției, nu ne-ar deranja să schimbăm fiecare linie.


Exemplul 3 Postarea listelor

Era nevoie de o listă a articolelor anterioare (sau viitoare) din postările dvs.? Eu cu siguranță o fac. Există o mulțime de pluginuri care furnizează coduri scurte, dar majoritatea necesită utilizarea de tone de atribute care pot duce la unele etichete urât, complexe [posts cat = "5,6" author = "barisunver" status = "private" postsperpage = "4" și = "so on"].

Ce zici de noi să ne folosim pe iubitul nostru $ tag-ul in schimb? Să facem o șansă:

 ID; $ post_author = $ post-> post_author; extract (shortcode_atts (array ('număr' => 5, 'exclude_current' => 'da', 'orderby' => 'data'), $ atts)); $ args = "; comutator ($ tag) case" latest_posts ": // nu avem nevoie de argumente pentru a recupera ultimele posturi :) break; case" category_posts ": $ categories = get_the_category ($ post_ID); $ first_category = Categorii $ [0] -> term_id; $ args = 'cat ='. $ first_category; break; caz "author_posts": $ args = 'author =' $ post_author; ($ exclude_current == 'nu') $ not_in = ";" $ get_posts = get_posts ($ args. $ not_in. & posts_per_page = '. $ număr.' & orderby = '. $ orderby); $ output = '
    „; foreach ($ get_posts ca $ post) $ output = = '
  • ". get_the_title (). '
  • „; $ output. = '
„; wp_reset_query (); returnați outputul $; add_shortcode ('latest_posts', 'wptuts_post_lists_sc'); add_shortcode ('categoria_posturi', 'wptuts_post_lists_sc'); add_shortcode ('autor_posts', 'wptuts_post_lists_sc'); add_shortcode ('future_posts', 'wptuts_post_lists_sc'); ?>

După cum puteți vedea, putem să scăpăm de 3 atribute de cod scurt: "pisică","autor" și "post_status"Puteți întinde întotdeauna cazs și adăugați noi coduri scurte cu această singură funcție relativ mică.


Înfășurarea în sus

Ca un fan al codurilor scurte WordPress, această descoperire a $ tag-ul variabilă este un fel de interesant pentru mine. Se pare că există un potențial uriaș de a utiliza această metodă.

Ce părere aveți despre această tehnică? Postați comentariile de mai jos și împărtășiți-vă gândurile cu noi!

Cod