Contenido

ShortCode API, otra novedad de WordPress 2.5

31 mar

+ 8

De entre todas las novedades de WordPress, ShortCode es una de las que menos bombo se le ha dado. Y la verdad es que merece la pena perder un rato en explicar de que va esta nueva funcionalidad.

BBCode

Los usuarios de foros, conocerán el formato BBCode, aquel compuesto de tags envueltos por [], similar al formato HTML. Este formato está muy extendido en internet y es fácil de memorizar. Veamos un ejemplo:

[b]Este text en negrita[/b] ==> <strong>Este text en negrita</strong>

Partiendo de esta base podemos pasar a definir que es ShortCode.

ShortCode

ShortCode API, es un conjunto de funciones que permite definir nuestros propios tags BBCode para insertarlos dentro de nuestros posts. La gracia de este sistema es que podemos ejecutar código PHP dentro del contenido de nuestros posts. Lo que además de ser muy interesante, evidentemente es muy peligroso.

add_shortcode($tag, $function); 

// [footag foo="bar"]
function footag_func($atts) {
	return @"foo = {$atts['foo']}";
}
// My Caption
function caption_shortcode( $atts, $content = null ) {
   extract( shortcode_atts( array(
      'class' => 'caption',
      ), $atts ) );

   return '<span class="' . attribtue_escape($caption) . '">' . $content . '</span>';
}

add_shortcode('caption', 'caption_shortcode');
add_shortcode('footag', 'footag_func');

Si nos fijamos en el código anterior, vemos que el tag BBCode se define mediante la función add_shortcode(), encargada de relacionar el tag con la función correspondiente.

remove_shortcode($tag);

Función que nos permite eliminar el funcionamiento de un shortcode, para ello indicaremos el tag que queremos eliminar de los disponibles.

remove_shortcode("caption"); // Eliminamos 

remove_all_shortcodes();

Si deseamos eliminar todos los shortcodes disponibles en nuestro WordPress, simplemente tenemos que usar esta función y se encargará de desactivarlos todos.

remove_all_shortcodes(); // Todos los shortcodes eliminados

shortcode_atts($pairs, $atts);

Función que nos devuelve un array de pares con los atributos por defecto para nuestros shortcodes.

$a = shortcode_atts( array(
   'title' => 'My Title'
   'foo' => 123,
   ), $atts );

do_shortcode($content);

Función que nos devuelve el resultado de la ejecución del texto con el shortcode reemplazado por la función.

do_shortcode('My Caption'); // <span class="headline">My Caption</span>

¿Donde poner este código?

WordPress no indica donde ubicar el código correspondiente a los shortcodes, pero el fichero en el que están definidas las funciones que hacen posible el funcionamiento, está ubicado en wp-includes/shortcodes.php. En él no hace referencia a ningún fichero externo, ubicado en una ruta algo más personal como wp-content/.

Como casi todo el código de WordPress puede ser insertado en cualquier sitio y de cualquier forma:

Pero quizas la forma más óptima hubiera sido añadir un par de líneas y sacar del core de WordPress una funcionalidad que permite tal nivel de personalización.

<?php
if ( file_exists(ABSPATH . 'wp-content/my-shortcodes.php') )
	require_once (ABSPATH . 'wp-content/my-shortcodes.php');

 ¿Algo así al inicio del fichero shorcodes.php? De esta forma disponemos de un fichero externo que nos permite tener definidos nuestros shortcodes por encima de todas las futuras actualizaciones…. paciencia :D

  • No entiendo como funciona. Esto de meterme de lleno en el cliente ha hecho que el server esté cada día mas lejos.
    Saludos.

  • @RetroFOX: Es realmente sencillo. Con esto te puedes personalizar la salida por pantalla de pequeñas porciones de código (muy similares a BBCode) simplemente definiendo una pequeña función.

  • Pues la verdad es que tiene buena pinta, pero podrían ponerlos mucho más fácil para los recién migrados a WP. ¿No piensan publicar los shortcodes que han usado en wordpress.com? Si cada usuario tiene que crear los suyos uno por uno (para youtube, dailymotion, slideshare, etc) podemos morir en el intento!

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.