Plugins (XIII) Shortcodes

En esta entrada vamos a aprender a configurar shortcodes para nuestro plugin. WP mantiene una API de códigos breves que se puede utilizar para crear funcionalidades en sus plugins.

Los shortcodes son códigos de macro textuales que se pueden incluir en una página, entrada o entrada personalizada y que al mostrarse modifican su contenido por otro.

En esta entrada vamos a realizar un pequeño ejemplo de shortcode para nuestro plugin por medio de la función add_shortcode(), viendo que que es realmente sencillo hacerlo.

add_shortcode('mytwitter', 'prowp_twitter');

function prowp_twitter(){
    return '<a href="https://twitter.com/_mialto_">@_mialto_</a>';
}

En este ejemplo vemos que se utiliza el conector add_shortcode con dos parámetros:

  • El primero es el nombre del shortocode
  • El segundo es la función callback que se realiza y que devuelve el código que ejecuta el shorcode

De este modo siempre que escribamos en una entrada de cualquier tipo [mytwitter] aparecerá un enlace que dirige a mi twitter.

Al ver el código estoy seguro de que todos aquellos que tenéis conocimientos básicos de desarrollo web estarán pensando en como hacer sus propios shortcodes introduciendo javascript, php y todo lo que queráis… (si no es así me defraudaríais) Pero por favor no los utilicéis como hacen muchos poniendo anuncios en mitad de las entradas, aparte de sentar mal es algo que rompe la estructura del tema…

ideaTruco: Los shortcodes tienen la ventaja de que no tienen que estar en un plugin, podemos añadirlos directamente a nuestro archivo functions.php (yo siempre los pongo al final del archivo donde es más fácil de localizar y modificar mi código). De este modo no tenemos que estar pendientes de tener que tener instalado el plugin, pero puede ser que una actualización del tema no haga desaparecer nuestro shortcode y con total seguridad al modificar el tema perdamos nuestros shortcodes.

Los shortcodes pueden configurarse de igual forma para aceptar atributos, de modo que podamos modificar su comportamiento, así podemos por ejemplo modificar la función anterior para hacerla un poco más compleja de la siguiente forma:

add_shortcode('mytwitter', 'prowp_twitter');

function prowp_twitter($atts, $content = null){
    extract(shortcode_atts (array(
        'persona' => 'miguel' //define el atributo predeterminado
        ), $atts));

    if($persona == 'miguel'){
        return '<a href="https://twitter.com/_mialto_">@_mialto_</a>';
    }else if($persona == 'shiva'){
        return '<a href="https://twitter.com/shiva_cor">@shiva_cor</a>';
    }
}

Con este código se añade el atributo persona que permite especificar la persona cuyo enlace de twitter se desea mostrar, por ejemplo si queremos mostrar a shiva debemos de poner [mytwitter persona=»shiva»] y si no se especifica el atributo se tomará que esta definido por defecto.

De esta forma los shortcodes pueden aceptar varios argumentos de una matriz abriendo una posibilidad infinita de poder introducir código en nuestras entradas de forma realmente sencilla…

Recuerda que nunca debes de olvidar introducir los valores por defecto o saltarán warnings, parecidos a este:

Warning: Missing argument 2 for shortcode_atts()

Por ello pongo otro ejemplo donde ser crea una marquesina y se recogen dos valores para que le tengas mucho más control:

//marquesinas
add_shortcode('marquesina', 'prowp_marquesina');

function prowp_marquesina($atts, $content = null){
 extract(shortcode_atts(array(
        'scroll' => 200,
        'contenido' => 'Hola mundo'
    ), $atts));
    $marquesina = "<marquee scrolldelay='" . $scroll . "'>" . $contenido . "</marquee>";
    return $marquesina;
}

Este shortcode funciona de la siguiente forma: 

[marquesina scroll=»100″ contenido=»Estamos en el horario de verano de 9:00 a 15:00″]

Recibiendo los argumentos scroll y contenido como vemos.

En la próxima entrada veremos como crear un widget desde un plugin…

Si te ha gustado, te ha servido o tienes dudas, no lo dudes deja un comentario. Como siempre, estaré encantado de contestar.