Flera kortkoder med en enda funktion 3 Killer-exempel

Det kraftfulla Shortcode API gör att vi kan skapa "snippets" och inkludera speciellt innehåll (som PHP-funktioner eller komplex HTML-kod) i våra inlägg. Det är extremt vanligt att bygga separata funktioner för varje kortnummer, men är det verkligen nödvändigt? I det här inlägget ska vi se hur vi kan använda mer än en kortnummer genom att bygga en enda funktion.


I Försvar av kortnummer

API: erna gör WordPress till ett av de mest flexibla innehållshanteringssystemen för alla. De är anledningen till att det finns tiotusentals plugins och teman där ute: Den enorma gemenskapen av WordPress kan göra WordPress att göra backflips och cartwheels tack vare API: erna i WordPress.

Bland dessa API är min favorit Shortcode API. Dess logik och validitet ifrågasätts, men jag tror starkt att använda kortkod i WordPress har en enkel inlärningskurva och när de lärt sig de få enkla reglerna om parametrar och öppnings- / stängningskoder, kan även nybörjare använda sig av kortnummer. Rätt, det är inte WYSIWYG men en WordPress-nybörjare kan ha en hårdare tid för att rensa roten om de gjorde något fel i en WYSIWYG-redigerare och förstörde HTML. Det är enklare att se att kortnummeret inte fungerar, ta bort det och skriv det igen.

Men det är självklart bara en åsikt av mig. Låt oss komma tillbaka till ämnet: Vi bygger flera kortkoder med en enda funktion!


Fördelen med denna teknik

Det finns egentligen inget behov av att argumentera fördelen med denna metod - överväga detta löjligt långa exempel:

 "," last "=>"), $ atts)); om ($ class! = ") $ class =". $ Klass; om ($ last = 'yes') $ last_class = 'last'; lämna tillbaka '
'. do_shortcode ($ content). '
'; add_shortcode ('one_half', 'one_half_sc'); funktion one_third_sc ($ atts, $ content = null, $ tag) extrakt (shortcode_atts (array (// extra classes 'class' => ", 'sist' =>"), $ atts)); om ($ class! = ") $ class =". $ Klass; om ($ last = 'yes') $ last_class = 'last'; lämna tillbaka '
'. do_shortcode ($ content). '
'; add_shortcode ("one_third", "one_third_sc"); funktion one_quarter_sc ($ atts, $ content = null, $ tag) extrakt (shortcode_atts (array (// extra classes 'class' => ", 'last' =>"), $ atts)); om ($ class! = ") $ class =". $ Klass; om ($ last = 'yes') $ last_class = 'last'; lämna tillbaka '
'. do_shortcode ($ content). '
'; add_shortcode ('one_quarter', 'one_quarter_sc'); funktion two_thirds_sc ($ atts, $ content = null, $ tag) extrakt (shortcode_atts (array (// extra classes 'class' => ", 'sist' =>"), $ atts)); om ($ class! = ") $ class =". $ Klass; om ($ last = 'yes') $ last_class = 'last'; lämna tillbaka '
'. do_shortcode ($ content). '
'; add_shortcode ('two_thirds', 'two_thirds_sc'); funktion three_quarters_sc ($ atts, $ content = null, $ tag) extrakt (shortcode_atts (array (// extra classes 'class' => ", 'sista' =>"), $ atts)); om ($ class! = ") $ class =". $ Klass; om ($ last = 'yes') $ last_class = 'last'; lämna tillbaka '
'. do_shortcode ($ content). '
'; add_shortcode ('three_quarters', 'three_quarters_sc'); ?>

Samma kod (både PHP och HTML) används om och om igen i varje enskild funktion - förutom de olika CSS-klasserna. Dessutom är attributen i varje funktion samma som i de andra funktionerna. Det är bara svårt att läsa. Kom och tänka på det om vi någonsin var tvungna att ändra en funktion i kolumnen divs, vi skulle behöva byta samma delar i alla funktioner.

Vad händer om det fanns en variabel för att hämta "taggen" för kortkoden? Inte så förvånansvärt kallas variabeln $ tag och kan användas inom våra funktioner. Det gör det möjligt för våra funktioner att kontrollera kortkodens tagg och uppför sig enligt taggen.

Tänk på ovanstående exempel: Om det finns mer än en funktion som tjänar nästan samma funktionalitet, det skulle vara logiskt (och ganska coolt) att ha en funktion för våra kortkoder att använda.

Jag har kommit med tre bra exempel på hur vi kan använda denna teknik. Om du kan tänka dig mer när du läser inlägget, är du välkommen att dela dina tankar med alla andra i kommentarfältet nedan!


Exempel 1 Videoinordningar

I en av mina första inlägg på Wptuts + förklarade jag hur man använder en kortnummer för att integrera videor från olika videoservrar som YouTube, Vimeo och Dailymotion. Koden såg ut så här:

  '$' = '' '' '' ',' w '=>' 600 ',' h '=>' 370 '), $ atts) http://www.youtube-nocookie.com/embed/ '. $ id; annars om ($ site == "vimeo") $ src =' http://player.vimeo.com/video/ '. $ id; annars om ($ site == "dailymotion") $ src = 'http://www.dailymotion.com/embed/video/'. $ id; annars om ($ site == "yahoo" ) $ src = 'http://d.yimg.com/sv/vyc/site/player.html#vid='. $ id; annars om ($ site == "bliptv") $ src = ' http://a.blip.tv/scripts/shoggplayer.html#file=http://blip.tv/rss/flash/ '. $ id; annars om ($ site == "veoh") $ src = 'http://www.veoh.com/static/swf/veoh/SPL.swf?videoAutoPlay=0&permalinkId='. $ id; annars om ($ site == "viddler") $ src = 'http: //www.viddler.com/simple/ '. $ id; if ($ id! = ") return'';  add_shortcode ('vid', 'vid_sc'); ?>

Även om det fortfarande är en så dålig övning (utom 6 annars om uttalanden) kan vi nu använda ett mindre attribut ("webbplats') och skapa separata kortnummer, så här:

 "," w '=>' 600 ',' h '=>' 370 '), $ atts)), byt ($ tag) fallet "youtube": $ src =' http: //www.youtube-nocookie .com / embed / '; break; case "vimeo": $ src =' http://player.vimeo.com/video/ '; break; case' viddler ': $ src =' http: //www.viddler .com / simple / '; break; case "dailymotion": $ src =' http://www.dailymotion.com/embed/video/ '; break; om ($ id! = ") returnera''; lämna tillbaka;  add_shortcode ('youtube', 'wptuts_embed_sc'); add_shortcode ('vimeo', 'wptuts_embed_sc'); add_shortcode ('viddler', 'wptuts_embed_sc'); add_shortcode ('dailymotion', 'wptuts_embed_sc'); ?>

Se vad vi gjorde? Vi gav en $ tag parameter för vår funktion i första raden (för att ersätta "webbplats"attribut) och använde a växla villkorligt uttalande (för bättre, renare kod). Resultatet för de två funktionerna kommer att vara detsamma, förutom att du kan använda [Youtube] istället för [vid site = "youtube"] nu.

(Jag använde inte några av videovärdarna i den andra funktionen. Om du behöver lägga till fler värdar kan du lägga till så många "falls som du vill.)


Exempel 2 Kolonn divs

Ah, kolumner ... de är den viktigaste delen av ett CSS-nät, och de gör det super lätt att göra din webbplats mer adaptiv, om de stöder responsiva designtekniker. Du kan se dem i nästan varje WordPress-tema på ThemeForest och de använder kortkoder ... med en övning som vårt "löjligt långa exempel" i början av denna handledning.

Som du kommer ihåg var koden nästan densamma i alla 5 funktionerna i det exemplet. Således skulle det vara otroligt enkelt att sammanfoga dem till en enda funktion och låta $ tag variabel fungerar sin magi:

 "), $ atts)), om ($ class! =") $ class = ". $ class; $ last ="; // kolla koden för att lägga till en "sista" klass om (strpos ($ tag, '_last')! == false) $ tag = str_replace ('_last', 'last', $ tag); $ output = '
'. do_shortcode ($ content). '
'; returnera $ output; 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 ('three_quarters', 'wptuts_columns_sc'); add_shortcode ('three_quarters_last', 'wptuts_columns_sc'); ?>

Ganska snyggt, eller hur? Vi behövde inte ens använda en växla!

Vi duplicerar fortfarande linjer samtidigt som du lägger till kortkoderna. Vågar gå ett steg längre? Ta bort add_shortcode () linjer att ersätta med detta:

 

Nu har vi ännu mer underhållsbar kod. Till exempel; om vi skulle ändra namnet på funktionen skulle vi inte bry oss om att ändra varje rad längre.


Exempel 3 Postlistor

Har du någonsin behövt lista några tidigare (eller framtida) artiklar i dina inlägg? Det gör jag verkligen. Det finns massor av plugins som tillhandahåller kortnummer men de flesta kräver att du använder många attribut som kan resultera i lite ful, komplex tagg som [inlägg katt = "5,6" författare = "barisunver" status = "privat" postsperpage = "4" och = "så vidare"].

Vad sägs om vi använder vår älskade $ tag istället? Låt oss ge det ett skott:

 ID; $ post_author = $ post-> post_author; extrakt (shortcode_atts (array ('number' => 5, 'exclude_current' => 'ja', 'orderby' => 'datum'), $ atts)); $ args = "; switch ($ tag) case" latest_posts ": // vi behöver inga argument för att hämta senaste inlägg :) break; case" category_posts ": $ categories = get_the_category ($ post_ID); $ first_category = $ kategorier [0] -> term_id; $ args = 'cat ='. $ first_category; break; case "author_posts": $ args = 'author ='. $ post_author; break; case "future_posts": $ args = 'post_status = future'; break; $ not_in = '& post__not_in [] ='. $ post_ID; om ($ exclude_current == 'nej') $ not_in = "; $ get_posts = get_posts ($ args. $ not_in. '& posts_per_page ='. $ nummer. '& orderby ='. $ orderby); $ output = '
    '; foreach ($ get_posts as $ post) $ output. = '
  • '. get_the_title (). '
  • '; $ output. = '
'; wp_reset_query (); returnera $ output; add_shortcode ('latest_posts', 'wptuts_post_lists_sc'); add_shortcode ('category_posts', 'wptuts_post_lists_sc'); add_shortcode ('author_posts', 'wptuts_post_lists_sc'); add_shortcode ('future_posts', 'wptuts_post_lists_sc'); ?>

Som du kan se kan vi bli av med 3 möjliga kortnummerattribut: "katt","författare"och"post_status"Du kan alltid förlänga falls och lägg till nya kortnummer med denna enda, relativt små funktion.


Avslutar

Som ett fan av WordPress-kortkoder, upptäckte denna upptäckt av $ tag variabel är typ av spännande för mig. Det verkar som om det finns en stor potential att utnyttja denna metod.

Vad tycker du om den här tekniken? Skriv dina kommentarer nedan och dela dina tankar med oss!