Varios códigos cortos con una sola función 3 ejemplos asesinos

La poderosa API de Shortcode nos permite crear "fragmentos" e incluir contenido especial (como funciones de PHP o código HTML complejo) en nuestras publicaciones. Es extremadamente común crear funciones separadas para cada código abreviado, pero ¿es realmente necesario? En esta publicación, veremos cómo podemos utilizar más de un código abreviado mediante la creación de una sola función.


En defensa de los códigos cortos

Las API hacen de WordPress uno de los sistemas de administración de contenido más flexibles de todos. Son la razón por la que hay decenas de miles de complementos y temas: la gran comunidad de WordPress es capaz de hacer que WordPress haga backflips y cartwheels, gracias a las API de WordPress..

Entre estas API, mi favorita es la API de código corto. Se cuestiona su lógica y validez, pero creo firmemente que el uso de códigos cortos en WordPress tiene una curva de aprendizaje fácil y una vez que se aprenden esas pocas reglas fáciles sobre los parámetros y las etiquetas de apertura / cierre, incluso los usuarios novatos pueden disfrutar de los códigos cortos. Correcto, no es WYSIWYG, pero un novato de WordPress puede tener más dificultades para limpiar el desorden si hizo algo mal en un editor WYSIWYG y arruinó el HTML. Más fácil de ver que el código abreviado no funciona, elimínelo y vuelva a escribirlo.

Pero claro, es solo una opinión mía. Volvamos al tema: estamos construyendo varios códigos cortos con una sola función!


El beneficio de esta técnica

Realmente no hay necesidad de argumentar el beneficio de este método. Considere este ejemplo ridículamente largo:

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

El mismo código (tanto PHP como HTML) se usa una y otra vez en todas las funciones, excepto en las distintas clases de CSS. Además, los atributos en cada función son los mismos que en las otras funciones. Es difícil de leer. Ahora que lo pienso, si alguna vez tuviéramos que cambiar una característica de estas columnas divs, tendríamos que cambiar las mismas partes en todas las funciones.

¿Qué pasaría si hubiera una variable para obtener la "etiqueta" del código abreviado? No tan sorprendentemente, la variable se llama $ etiqueta y podría ser utilizado dentro de nuestras funciones. Permite que nuestras funciones verifiquen la etiqueta del shortcode y se comporten de acuerdo con la etiqueta.

Piense en el ejemplo anterior: si hay más de una función que sirve casi la misma funcionalidad, sería lógico (y bastante bueno) tener una función para nuestros códigos cortos para usar.

He encontrado tres buenos ejemplos de cómo podemos usar esta técnica. Si puede pensar más mientras lee la publicación, puede compartir sus opiniones con todos los demás en la sección de comentarios a continuación.!


Ejemplo 1 Video insertado

En una de mis primeras publicaciones en Wptuts +, expliqué cómo usar un shortcode para incrustar videos de varios hosts de videos como YouTube, Vimeo y Dailymotion. El código se veía así:

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

Si bien sigue siendo una práctica no tan mala (excepto el 6 si no declaraciones), ahora podemos usar un atributo menos ('sitio') y crea códigos cortos separados, como este:

 ", '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''; regreso;  add_shortcode ('youtube', 'wptuts_embed_sc'); add_shortcode ('vimeo', 'wptuts_embed_sc'); add_shortcode ('viddler', 'wptuts_embed_sc'); add_shortcode ('dailymotion', 'wptuts_embed_sc'); ?>

¿Ves lo que hicimos? Proporcionamos un $ etiqueta parámetro para nuestra función en la primera línea (para reemplazar el "sitio"atributo) y utiliza un cambiar declaración condicional (por el bien de un código mejor y más limpio). El resultado para las dos funciones será el mismo, excepto que puede usar [Youtube] en lugar de [vid sitio = "youtube"] ahora.

(No utilicé algunos de los hosts de video en la segunda función. Si necesita agregar más hosts, puede agregar tantos "caso"s como quieras.)


Ejemplo 2 Columna divs

Ah, las columnas ... son la parte más importante de una cuadrícula de CSS, y hacen que sea muy fácil hacer que su sitio web sea más adaptable, si admiten técnicas de diseño receptivo. Puedes verlos en casi todos los temas de WordPress en ThemeForest y usan códigos cortos ... con una práctica como nuestro "ejemplo ridículamente largo" al comienzo de este tutorial..

Como recordará, el código era casi el mismo en todas las 5 funciones en ese ejemplo. Por lo tanto, sería increíblemente fácil fusionarlos en una sola función y dejar que $ etiqueta trabajo variable su magia:

 "), $ atts)); if ($ class! =") $ class = ". $ class; $ last ="; // marque la etiqueta de código abreviado para agregar una "última" clase if (strpos ($ tag, '_last')! == false) $ tag = str_replace ('_last', 'last', $ tag); $ output = '
'. do_shortcode ($ contenido). '
'; devuelve $ 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'); ?>

Bastante limpio, ¿verdad? Ni siquiera necesitamos usar un cambiar!

Sin embargo, seguimos duplicando líneas mientras agregamos los códigos cortos. ¿Te atreves a ir un paso más allá? Eliminar el add_shortcode () líneas para reemplazar con esto:

 

Ahora tenemos un código aún más mantenible. Por ejemplo; Si tuviéramos que cambiar el nombre de la función, no nos preocuparíamos más por cambiar cada línea..


Ejemplo 3 Listas de Publicaciones

¿Alguna vez ha necesitado enumerar algunos artículos anteriores (o futuros) en sus publicaciones? Ciertamente lo hago. Hay muchos complementos que proporcionan códigos cortos, pero la mayoría de ellos requieren que uses toneladas de atributos que pueden dar como resultado una etiqueta fea y compleja como [posts cat = "5,6" author = "barisunver" status = "private" postsperpage = "4" y = "etc.".

¿Qué tal si usamos a nuestra amada? $ etiqueta ¿en lugar? Vamos a darle una oportunidad:

 CARNÉ DE IDENTIDAD; $ post_author = $ post-> post_author; extraer (shortcode_atts (array ('número' => 5, 'exclude_current' => 'sí', 'orderby' => 'fecha'), $ atts)); $ args = "; switch ($ tag) caso" latest_posts ": // no necesitamos ningún argumento para recuperar las últimas publicaciones :) break; caso" 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 as $ post) $ output. = '
  • '. get_the_title (). '
  • '; $ salida. = '
'; wp_reset_query (); devuelve $ 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'); ?>

Como puede ver, podemos eliminar 3 posibles atributos de shortcode: "gato"autor"y"post_status". Siempre se puede extender la casosy agregue nuevos códigos cortos con esta función única y relativamente pequeña.


Terminando

Como fan de los códigos cortos de WordPress, este descubrimiento de la $ etiqueta La variable es algo emocionante para mí. Parece que hay un gran potencial para utilizar este método.

¿Qué te parece esta técnica? Publique sus comentarios a continuación y comparta sus opiniones con nosotros!