Mehrere Shortcodes mit einer einzigen Funktion 3 Killer-Beispiele

Die leistungsstarke Shortcode-API ermöglicht es uns, "Snippets" zu erstellen und spezielle Inhalte (wie PHP-Funktionen oder komplexer HTML-Code) in unsere Beiträge aufzunehmen. Es ist üblich, für jeden Shortcode separate Funktionen zu erstellen, aber ist dies wirklich notwendig? In diesem Beitrag werden wir sehen, wie wir mehr als einen Shortcode verwenden können, indem wir eine einzige Funktion erstellen.


Zur Verteidigung von Shortcodes

Die APIs machen WordPress zu einem der flexibelsten Content-Management-Systeme überhaupt. Sie sind der Grund, warum es Zehntausende von Plugins und Themes gibt: Die große Community von WordPress kann dank der APIs von WordPress WordPress zu Backflips und Cartwheels machen.

Unter diesen APIs ist mein Favorit die Shortcode-API. Seine Logik und Gültigkeit wird in Frage gestellt, aber ich bin der festen Überzeugung, dass die Verwendung von Shortcodes in WordPress eine einfache Lernkurve hat. Sobald diese wenigen einfachen Regeln über Parameter und das Öffnen / Schließen von Tags erlernt sind, können auch Neulinge die Verwendung von Shortcodes genießen. Richtig, es ist nicht WYSIWYG, aber ein WordPress-Neuling hat möglicherweise Schwierigkeiten, das Chaos zu beseitigen, wenn er in einem WYSIWYG-Editor etwas falsch gemacht hat und den HTML-Code ruiniert. Leichter zu sehen, dass der Kurzcode nicht funktioniert, löschen Sie ihn und geben Sie ihn erneut ein.

Aber natürlich ist es nur eine Meinung von mir. Kommen wir zurück zum Thema: Wir bauen mehrere Kurzcodes mit einer einzigen Funktion!


Der Nutzen dieser Technik

Es gibt wirklich keinen Grund, den Nutzen dieser Methode zu diskutieren - betrachten Sie dieses lächerlich lange Beispiel:

 ", 'last' =>"), $ atts)); if ($ class! = ") $ class =". $ class; if ($ last = 'yes') $ last_class = 'last'; Rückkehr '
'. do_shortcode ($ content). '
'; add_shortcode ('one_half', 'one_half_sc'); Funktion one_third_sc ($ atts, $ content = null, $ tag) extract (shortcode_atts (array (// zusätzliche Klassen 'class' =>, 'last' => "), $ atts)); if ($ class! = ") $ class =". $ class; if ($ last = 'yes') $ last_class = 'last'; Rückkehr '
'. do_shortcode ($ content). '
'; add_shortcode ('one_third', 'one_third_sc'); Funktion one_quarter_sc ($ atts, $ content = null, $ tag) extract (shortcode_atts (array (// zusätzliche Klassen 'class' = ", 'last' =>"), $ atts)); if ($ class! = ") $ class =". $ class; if ($ last = 'yes') $ last_class = 'last'; Rückkehr '
'. do_shortcode ($ content). '
'; add_shortcode ('one_quarter', 'one_quarter_sc'); Funktion two_thirds_sc ($ atts, $ content = null, $ tag) extract (shortcode_atts (array (// zusätzliche Klassen 'class' => ", 'last' =>"), $ atts)); if ($ class! = ") $ class =". $ class; if ($ last = 'yes') $ last_class = 'last'; Rückkehr '
'. do_shortcode ($ content). '
'; add_shortcode ('two_thirds', 'two_thirds_sc'); Funktion three_quarters_sc ($ atts, $ content = null, $ tag) extract (shortcode_atts (array (// zusätzliche Klassen 'class' =>, 'last' => "), $ atts)); if ($ class! = ") $ class =". $ class; if ($ last = 'yes') $ last_class = 'last'; Rückkehr '
'. do_shortcode ($ content). '
'; add_shortcode ('three_quarters', 'three_quarters_sc'); ?>

Derselbe Code (sowohl PHP als auch HTML) wird in jeder einzelnen Funktion immer wieder verwendet - mit Ausnahme der verschiedenen CSS-Klassen. Außerdem sind die Attribute in jeder Funktion die gleichen wie in den anderen Funktionen. Es ist schwer zu lesen. Denken Sie darüber nach, ob wir jemals ein Merkmal dieser Kolumne ändern mussten divs, müssten wir in allen Funktionen die gleichen Teile ändern.

Was wäre, wenn es eine Variable zum Abrufen des "Tags" des Shortcodes gäbe? Nicht so überraschend wird die Variable aufgerufen $ tag und könnte in unseren Funktionen verwendet werden. Damit können unsere Funktionen das Tag des Shortcodes überprüfen und sich entsprechend dem Tag verhalten.

Denken Sie an das obige Beispiel: Wenn es mehr als eine Funktion gibt, die dient fast Bei der gleichen Funktionalität wäre es logisch (und ziemlich cool), eine Funktion für unsere Kurzwahlnummern zu verwenden.

Ich habe drei gute Beispiele gefunden, wie wir diese Technik anwenden können. Wenn Ihnen beim Lesen des Beitrags mehr einfällt, können Sie Ihre Gedanken gerne im Kommentarbereich mit allen anderen teilen!


Beispiel 1 Videoeinbettungen

In einem meiner ersten Beiträge zu Wptuts + habe ich erklärt, wie man mit einem Shortcode Videos von verschiedenen Video-Hosts wie YouTube, Vimeo und Dailymotion einbettet. Der Code sah so aus:

  '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'); ?>

Es ist zwar immer noch eine nicht so schlechte Praxis (außer der 6 sonst wenn Anweisungen), können wir jetzt ein Attribut weniger verwenden ('Seite? ˅') und erstellen Sie separate Kurzcodes wie folgt:

 ", 'w' => '600', 'h' => '370'), $ atts)); Schalter ($ tag) Fall" youtube ": $ src = 'http: //www.youtube-nocookie .com / embed / '; break; Fall "vimeo": $ src =' http://player.vimeo.com/video/ '; break; Fall "viddler": $ src =' http: //www.viddler .com / simple / '; break; Fall "dailymotion": $ src =' http://www.dailymotion.com/embed/video/ '; break; if ($ id! = ") return''; Rückkehr;  add_shortcode ('youtube', 'wptuts_embed_sc'); add_shortcode ('vimeo', 'wptuts_embed_sc'); add_shortcode ('viddler', 'wptuts_embed_sc'); add_shortcode ('dailymotion', 'wptuts_embed_sc'); ?>

Sehen Sie, was wir gemacht haben Wir haben ein bereitgestellt $ tag Parameter für unsere Funktion in der ersten Zeile (anstelle des "Seite? ˅"Attribut) und verwendet a Schalter Bedingungsanweisung (für besseren, saubereren Code). Das Ergebnis für die beiden Funktionen ist dasselbe, außer dass Sie es verwenden können [Youtube] anstatt [vid site = "youtube"] jetzt.

(Ich habe einige der Video-Hosts in der zweiten Funktion nicht verwendet. Wenn Sie weitere Hosts hinzufügen müssen, können Sie so viele hinzufügen. "Fall"s wie du willst.)


Beispiel 2 Spalte divs

Ah, Spalten… sie sind der wichtigste Teil eines CSS-Rasters. Sie machen es sehr einfach, Ihre Website anpassungsfähiger zu machen, wenn sie responsive Design-Techniken unterstützen. Sie können sie in fast jedem WordPress-Theme in ThemeForest sehen und sie verwenden Shortcodes ... mit einer Übung wie unserem "lächerlich langen Beispiel" am Anfang dieses Tutorials.

Wie Sie sich erinnern, war der Code in diesem Beispiel in allen fünf Funktionen nahezu gleich. Es wäre also unglaublich einfach, sie in einer einzigen Funktion zusammenzuführen und die $ tag variable Arbeit seine Magie:

 "), $ atts)); if ($ class! =") $ class = ". $ class; $ last ="; // das shortcode-Tag überprüfen, um eine "letzte" Klasse hinzuzufügen if (strpos ($ tag, '_last')! == false) $ tag = str_replace ('_last', 'last', $ tag); $ output = '
'. do_shortcode ($ content). '
'; return $ 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'); ?>

Ziemlich ordentlich, richtig? Wir brauchten nicht einmal eine Schalter!

Wir duplizieren jedoch immer noch Zeilen, während wir die Kurzwahlnummern hinzufügen. Wagen Sie einen Schritt weiter? Entferne das add_shortcode () Zeilen, die durch diese ersetzt werden sollen:

 

Jetzt haben wir noch mehr wartbaren Code. Zum Beispiel; Wenn wir den Namen der Funktion ändern würden, würden wir nicht mehr jede Zeile ändern.


Beispiel 3 Postlisten

Wollten Sie in Ihren Beiträgen schon einige vorherige (oder zukünftige) Artikel auflisten? Ich mache das sicherlich. Es gibt eine Menge Plug-Ins, die Shortcodes bereitstellen, aber für die meisten von ihnen müssen Sie Tonnen von Attributen verwenden, die zu hässlichen, komplexen Tags führen können [posts cat = "5,6" author = "barisunver" status = "privat" postsperpage = "4" und = "so weiter"].

Wie wäre es mit unserem Geliebten? $ tag stattdessen? Lass es uns versuchen:

 ICH WÜRDE; $ post_author = $ post-> post_author; extrahieren (shortcode_atts (array ('number' => 5, 'exclude_current' => 'yes', 'orderby' => 'date'), $ atts)); $ args = "; switch ($ tag) case" latest_posts ": // Wir benötigen keine Argumente, um die neuesten Beiträge abzurufen :) break; case" category_posts ": $ categories = get_the_category ($ post_ID); $ first_category = $ categories [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 ='. $ number. '& orderby ='. $ orderby); $ output = '
    '; foreach ($ get_posts als $ post) $ output. = '
  • '. get_the_title (). '
  • '; $ output. = '
'; wp_reset_query (); return $ 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')); ?>

Wie Sie sehen, können wir 3 mögliche Shortcode-Attribute loswerden: "Katze","Autor" und "Poststatus". Sie können das jederzeit erweitern Falls und fügen Sie mit dieser einzigen, relativ kleinen Funktion neue Kurzcodes hinzu.


Einpacken

Als Fan von WordPress-Shortcodes ist diese Entdeckung der $ tag Variable ist für mich irgendwie aufregend. Es scheint, dass es ein enormes Potenzial gibt, diese Methode anzuwenden.

Was denkst du über diese Technik? Poste deine Kommentare unten und teile deine Gedanken mit uns!