Shortcode multipli con una singola funzione 3 esempi di killer

La potente API Shortcode ci consente di creare "snippet" e includere contenuti speciali (come funzioni PHP o codice HTML complesso) nei nostri post. È estremamente comune creare funzioni separate per ogni shortcode, ma è davvero necessario? In questo post vedremo come possiamo utilizzare più di un shortcode creando una singola funzione.


In difesa degli shortcode

Le API rendono WordPress uno dei sistemi di gestione dei contenuti più flessibili di tutti. Sono la ragione per cui ci sono decine di migliaia di plugin e temi là fuori: l'enorme comunità di WordPress è in grado di fare WordPress fare backflip e cartwheels, grazie alle API di WordPress.

Tra queste API, la mia preferita è l'API Shortcode. La sua logica e validità è stata messa in discussione, ma credo fermamente che l'utilizzo di shortcode in WordPress abbia una curva di apprendimento facile e una volta appreso quelle poche semplici regole sui parametri e sui tag di apertura / chiusura, anche gli utenti alle prime armi possono divertirsi usando gli shortcode. Corretto, non è WYSIWYG ma un principiante di WordPress potrebbe avere un tempo più difficile per cancellare il pasticcio se facessero qualcosa di sbagliato in un editor WYSIWYG e rovinato l'HTML. Più facile vedere che lo shortcode non funziona, cancellarlo e digitarlo di nuovo.

Ma certo, è solo una mia opinione. Torniamo all'argomento: stiamo creando più shortcode con una singola funzione!


Il vantaggio di questa tecnica

Non c'è davvero bisogno di discutere il vantaggio di questo metodo - considera questo esempio ridicolmente lungo:

 ", 'last' =>"), $ atts)); if ($ class! = ") $ class =". $ Classe; if ($ last = 'yes') $ last_class = 'last'; ritorno '
'. do_shortcode ($ content). '
'; add_shortcode ('one_half', 'one_half_sc'); function one_third_sc ($ atts, $ content = null, $ tag) extract (shortcode_atts (array (// extra classes 'class' => ", 'last' =>"), $ atts)); if ($ class! = ") $ class =". $ Classe; if ($ last = 'yes') $ last_class = 'last'; ritorno '
'. do_shortcode ($ content). '
'; add_shortcode ('one_third', 'one_third_sc'); function one_quarter_sc ($ atts, $ content = null, $ tag) extract (shortcode_atts (array (// extra classes 'class' => ", 'last' =>"), $ atts)); if ($ class! = ") $ class =". $ Classe; if ($ last = 'yes') $ last_class = 'last'; ritorno '
'. do_shortcode ($ content). '
'; add_shortcode ('one_quarter', 'one_quarter_sc'); function two_thirds_sc ($ atts, $ content = null, $ tag) extract (shortcode_atts (array (// extra classes 'class' => ", 'last' =>"), $ atts)); if ($ class! = ") $ class =". $ Classe; if ($ last = 'yes') $ last_class = 'last'; ritorno '
'. do_shortcode ($ content). '
'; add_shortcode ('two_thirds', 'two_thirds_sc'); function three_quarters_sc ($ atts, $ content = null, $ tag) extract (shortcode_atts (array (// extra classes 'class' => ", 'last' =>"), $ atts)); if ($ class! = ") $ class =". $ Classe; if ($ last = 'yes') $ last_class = 'last'; ritorno '
'. do_shortcode ($ content). '
'; add_shortcode ('three_quarters', 'three_quarters_sc'); ?>

Lo stesso codice (sia PHP che HTML) viene utilizzato più e più volte in ogni singola funzione, tranne le diverse classi CSS. Inoltre, gli attributi di ciascuna funzione sono gli stessi delle altre funzioni. È solo difficile da leggere. Vieni a pensarci, se mai dovessimo cambiare una caratteristica di queste colonne divs, dovremmo cambiare le stesse parti in tutte le funzioni.

Cosa accadrebbe se ci fosse una variabile per recuperare il "tag" dello shortcode? Non così sorprendentemente, la variabile è chiamata $ tag e potrebbe essere usato all'interno delle nostre funzioni. Permette alle nostre funzioni di controllare il tag dello shortcode e comportarsi in base al tag.

Pensa all'esempio precedente: se c'è più di una funzione che serve quasi la stessa funzionalità, sarebbe logico (e piuttosto interessante) avere una funzione per i nostri codici brevi da usare.

Ho trovato tre buoni esempi su come possiamo usare questa tecnica. Se riesci a pensare a qualcosa di più mentre leggi il post, puoi condividere i tuoi pensieri con tutti gli altri nella sezione commenti qui sotto!


Esempio 1 Video incorporato

In uno dei miei primi post su Wptuts +, ho spiegato come utilizzare uno shortcode per incorporare video di vari host video come YouTube, Vimeo e Dailymotion. Il codice era simile a questo:

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

Mentre è ancora una pratica non male (tranne il 6 altrimenti se dichiarazioni), ora possiamo usare un attributo in meno ('posto') e crea codici brevi separati, come questo:

 ", '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/ '; break; case "viddler": $ src =' http: //www.viddler .com / simple / '; break; case "dailymotion": $ src =' http://www.dailymotion.com/embed/video/ '; break; if ($ id! = ") return''; ritorno;  add_shortcode ('youtube', 'wptuts_embed_sc'); add_shortcode ('vimeo', 'wptuts_embed_sc'); add_shortcode ('viddler', 'wptuts_embed_sc'); add_shortcode ('dailymotion', 'wptuts_embed_sc'); ?>

Vedi cosa abbiamo fatto? Abbiamo fornito un $ tag parametro per la nostra funzione nella prima riga (per sostituire il "posto"attributo" e utilizzato a interruttore dichiarazione condizionale (per il bene di un codice migliore e più pulito). Il risultato per le due funzioni sarà lo stesso, tranne che puoi usare [Youtube] invece di [vid site = "youtube"] adesso.

(Non ho usato alcuni degli host video nella seconda funzione. Se hai bisogno di aggiungere altri host, puoi aggiungerne tanti "Astuccio"s come vuoi.)


Colonna Esempio 2 divS

Ah, le colonne ... sono la parte più importante di una griglia CSS e rendono super facile rendere il tuo sito Web più flessibile, se supportano tecniche di progettazione reattive. Puoi vederli in quasi tutti i temi WordPress su ThemeForest e usano gli shortcode ... con una pratica come il nostro "esempio ridicolmente lungo" all'inizio di questo tutorial.

Come ricordi, il codice era quasi lo stesso in tutte e 5 le funzioni in quell'esempio. Pertanto, sarebbe incredibilmente facile fonderli in un'unica funzione e lasciare che il $ tag variabile funziona la sua magia:

 "), $ atts)); if ($ class! =") $ class = ". $ class; $ last ="; // controlla il tag shortcode per aggiungere una "last" class if (strpos ($ tag, '_last')! == false) $ tag = str_replace ('_last', 'last', $ tag); $ output = '
'. do_shortcode ($ content). '
'; restituire $ 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'); ?>

Abbastanza pulito, giusto? Non abbiamo nemmeno bisogno di usare a interruttore!

Tuttavia, duplichiamo ancora le righe durante l'aggiunta degli shortcode. Hai il coraggio di fare un passo in più? Rimuovi il add_shortcode () linee da sostituire con questo:

 

Ora abbiamo un codice ancora più gestibile. Per esempio; se dovessimo cambiare il nome della funzione, non ci preoccuperemmo di cambiare ogni riga più.


Elenchi di annunci di esempio 3

Hai mai avuto bisogno di elencare alcuni articoli precedenti (o futuri) nei tuoi post? Io certamente. Ci sono un sacco di plugin che forniscono codici brevi, ma la maggior parte di essi richiede l'utilizzo di tonnellate di attributi che possono risultare in alcuni tag brutti e complessi come [posts cat = "5,6" author = "barisunver" status = "privato" postsperpage = "4" and = "so on"].

Che ne dici di usare la nostra amata $ tag anziché? Facciamo un tentativo:

 ID; $ post_author = $ post-> post_author; extract (shortcode_atts (array ('number' => 5, 'exclude_current' => 'yes', 'orderby' => 'date'), $ atts)); $ args = "; switch ($ tag) case" latest_posts ": // non abbiamo bisogno di argomenti per recuperare i post più recenti :) break; case" category_posts ": $ categories = get_the_category ($ post_ID); $ first_category = $ categorie [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; if ($ exclude_current ==' no ') $ not_in = "; $ get_posts = get_posts ($ args. $ not_in. '& posts_per_page ='. $ numero. '& orderby ='. $ orderby); $ output = '
    '; foreach ($ get_posts come $ post) $ output. = '
  • '. get_the_title (). '
  • '; $ output. = '
'; wp_reset_query (); restituire $ 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'); ?>

Come puoi vedere, possiamo sbarazzarci di 3 possibili attributi shortcode: "gatto","autore" e "post_status". Puoi sempre estendere il Astuccios e aggiungere nuovi shortcode con questa funzione singola, relativamente piccola.


Avvolgendo

Come fan degli shortcode di WordPress, questa scoperta di $ tag variabile è una specie di eccitante per me. Sembra che ci sia un enorme potenziale per utilizzare questo metodo.

Cosa ne pensi di questa tecnica? Pubblica i tuoi commenti qui sotto e condividi i tuoi pensieri con noi!