domingo, 17 de febrero de 2013

Manual ShortCodes en WordPress (completísimo) II

En esta entrada vamos a ver el potencial de los shortcodes (atajos) mediante su flexibilidad para poder ser parametrizados, siguiendo con el ejemplo sencillo, ahora vamos a ver como sería para poder elegir cuantos post mostrar de lo últimos publicados.
Obtenemos los parámetros ('1' por defecto), hacemos la consulta y mostramos la lista, es lo que hace el siguiente código:
function recent_posts_function($atts){
   extract(shortcode_atts(array(
      'posts' => 1,
   ), $atts));
   $return_string = '<ul>';
   query_posts(array('orderby' => 'date', 'order' => 'DESC' , 'showposts' => $posts));
   if (have_posts()) :
      while (have_posts()) : the_post();
         $return_string .= '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
      endwhile;
   endif;
   $return_string .= '</ul>';
   wp_reset_query();
   return $return_string;
}

Podemos meter tantos parámetros como querámos, pero bueno, ahora vemos el ejemplo funcionar, en nuestra entrada de prueba podemos llamar a nuestro atajo así desde el contenido directamente:
[recent-posts posts="5"]
Actualizamos la página, y veremos lo que nos muestra :D

Ahora vamos a ir un paso más allá, y es pasarle también el contenido entre etiquetas como parámetro y mostrarlo como título de nuestro 'atajo'.
Esto en nuestro archivo shortcodes.php:
function recent_posts_function($atts, $content = null) {
   extract(shortcode_atts(array(
      'posts' => 1,
   ), $atts));

   $return_string = '<h3>'.$content.'</h3>';
   $return_string .= '<ul>';
   query_posts(array('orderby' => 'date', 'order' => 'DESC' , 'showposts' => $posts));
   if (have_posts()) :
      while (have_posts()) : the_post();
         $return_string .= '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
      endwhile;
   endif;
   $return_string .= '</ul>';

   wp_reset_query();
   return $return_string;
}

Y esto en nuestra entrada/página:
[recent-posts posts="5"]Cabecera atajo[/recent-posts]

Y ya por útlimo en esta entrada, ver cómo usar los atajos también en los widgets, ya que de forma predeterminada son ignorados en el sidebar, pero se pueden habilitar añadiendo una solo línea de código: 
add_filter('widget_text', 'do_shortcode');

Para la 3ª y última parte del manual de los shortcodes en wordpress vamos a dejar cómo añadirlos en el editor de entradas y páginas, para un uso más sencillo y amigable por parte del usuario final.

martes, 12 de febrero de 2013

Manual ShortCodes en WordPress (completísimo) I

Los shortcodes se introdujeron a partir de la versión 2.5 de WP. Facilitan la repetición de pequeñas tareas repetitivas en las plantillas (como publicar en Twitter, embeber videos, poner publicidad, un mapa de google, una enmaquetación específica, etc.).
Funciona poniendo un código corto entre corchetes [código-corto] (como próximamente veremos) que luego es sustituido (automáticamente por WO) por esos pequeños fragmentos de código o hooks.
El código siguiente se puede poner en en archivo functions.php pero yo prefiero añadir sólo esta línea a ese archivo:
include(TEMPLATEPATH . '/includes/shortcodes.php');
y poner en shortcodes.php el código, para que de esa manera sea luego un poco más cómodo exportalos a otras plantillas o salvarlos de alguna actualización.
Se crea en pocos y sencillos pasos para un caso 'base',
  • Se crea la función (callback) llamada. En este ejemplo nos devuelve una cadena con el enlace y el nombre del último post introducido.
function recent_posts_function() {
   query_posts(array('orderby' => 'date', 'order' => 'DESC' , 'showposts' => 1));
   if (have_posts()) :
      while (have_posts()) : the_post();
         $return_string = '<a href="'.get_permalink().'">'.get_the_title().'</a>';
      endwhile;
   endif;
   wp_reset_query();
   return $return_string;
}

  • Se "registra" el atajo o shortcode 
function register_shortcodes(){
   add_shortcode('recent-posts', 'recent_posts_function');

  •  Se añade el gancho 'hook'
add_action( 'init', 'register_shortcodes'); 

Hasta aquí la manera de crear un shortcode sencillo para mostrar el último post de nuestro blog en una entrada.
En el siguiente veremos cómo pasarle parámetros (para mostrar 5 por ejemplo) y ponerle contenido entre las etiquetas [atajo] Lorem ipsum... [/atajo]