viernes, 26 de febrero de 2016

Formatos de entrada en WordPress


Explicación de qué son y cómo funcionan los formatos de entrada (post formats) que incorpora WordPress desde la versión 3.1.
archivado en: WordPress / 14 octubre, 2012
 
Desde la versión 3.1, WordPress permite definir distintos «formatos» para las entradas. De momento, además del tipo de entradas normales, se pueden especificar:
  • minientradas (aside)
  • chat (chat)
  • enlaces (link)
  • galería (gallery)
  • estado (status)
  • cita (quote)
  • vídeo (video)
  • audio (audio)
  • imagen (image)
  • y galería de imágenes (gallery)


Que en el editor visual se ven a la derecha del intefaz:
Son muy útiles para aplicar distintos estilos según una entrada sea de un formato u otro. Por ejemplo, a mí me han venido muy bien para incorporar en este blog microentradas, en las que apunto como si fueran post-it ideas o cualquier otro dato que necesite consultar más adelante, pues uso esta bitácora sobre todo como un cerebro auxiliar para las cosinas de Internet. (Otro día hablaré sobre la importancia de usar una libreta para liberar memoria del pensamiento, algo que aprendí de mi querido amigo Daniel Tubau). Vamos a ver cómo funcionan :-) .

2 principios básicos

1) Para trabajar con formatos de entrada hay que añadir esta línea en el archivo functions.php
  • add_theme_support( 'post-formats', array( 'aside', 'chat', 'link', 'status', 'quote', 'video', 'audio', 'image', 'gallery' ) );
Bueno, eso si se necesitan todos, de lo contrario, se pueden quitar los que sean. Lo único importante es que cada formato esté definido entre comillas simples en el array y que estén separados por comas. Por ejemplo, así solo se añadirían las microentradas y los vídeos.
  • add_theme_support( 'post-formats', array( 'aside', 'video') );
2) Hay tres funciones principales para trabajar con formatos de entrada:
Las dos más útiles son get_post_format() y, en menor medida, has_post_format().
El empleo de formatos de entrada puede dar mucho juego, pero de momento estos son los tres sitios donde veo más claro cómo aprovechar su potencial:
  • en el loop de la portada (index.php)
  • para mostrar una entrada individual (single.php)
  • en el archivo (archive.php)

Formatos en el loop

Por lo que he visto, es la manera más habitual de utilizar los formatos y se puede hacer de dos formas principales.
a) Mediante estructuras condicionales
La función has_post_format() lo que hace es evaluar si un post tiene un formato, en cuyo caso devuelve true, lo que permite emplearla en una estructura condicional (if... else) . De esta manera, se pueden definir unas u otras según el tipo de formato.
Por ejemplo, este podría ser un fragmento normal del loop de WordPress, en el cual se cargan el título (línea 3) y el contenido (línea 4) de uno o más post:
  1. <?php if (have_posts()) : ?>
  2. <?php while (have_posts()) : the_post(); ?>
  3. <h5  class="titulo"><?php  the_title();  ?></h5>
  4. <div class="contenido"><?php  the_content ();  ?></div>
  5. <?php endwhile;  ?>
  6. <?php endif; ?>
Ahora, en el caso de que sea una microentrada (aside), no vamos a cargar el título.
  1. <?php if (have_posts()) : ?>
  2. <?php while (have_posts()) : the_post(); ?>
  3. <?php if (has_post_format('aside')) { ?>
  4. <!-- aquí ya no cargamos el título -->
  5. <div class="contenido"><?php  the_content ();  ?></div>
  6. <?php } else { ?>
  7. <h5  class="titulo"><?php  the_title();  ?></h5>
  8. <div class="contenido"><?php  the_content ();  ?></div>
  9. }
  10. <?php endwhile;  ?>
  11. <?php endif; ?>
b) Cambiando clases e identificadores
Es una forma que me parece más ingeniosa y que ahorra líneas de código. La función get_post_format() devuelve el formato de una entrada, es decir, si es del tipo microentrada (aside) devuelve la cadena 'aside'. Así, se puede ir añadiendo dinámicamente al nombre de cada clase o identificador esa cadena para definir un estilo u otro.
Por ejemplo, en el caso anterior teníamos dos estilos: "titulo", para los títulos y "contenido" para el contenido. Ahora imaginemos que en las hojas de estilo (style.css) hemos puesto el título con una fuente de color rojo y el contenido con un fondo verde:
  1. .titulo {
  2. color:#900;
  3. }
  4. .contenido {
  5. background-color:#090;
  6. }
Añadimos dos nuevos estilos para las microentradas (aside), que tendrán el título de color azul y el contenido con un fondo blanco:
  1. .tituloaside {
  2. color:#09c;
  3. }
  4. .contenidoaside {
  5. background-color:#fff;
  6. }
Y finalmente, con un echo, en el loop se va pegando al nombre de cada selector la cadena del tipo de formato (recordemos que las entradas normales devuelven false, por lo que no se añadiría nada al nombre).
  1. <?php if (have_posts()) : ?>
  2. <?php while (have_posts()) : the_post(); ?>
  3. <h5  class="titulo<?php echo get_post_format();  ?>"><?php  the_title();  ?></h5>
  4. <div class="contenido<?php echo get_post_format();  ?>"><?php  the_content ();  ?></div>
  5. <?php endwhile;  ?>
  6. <?php endif; ?>
Nota: como bien explica Juan Díaz Bustamante en emenia, se puede conseguir algo parecido con la generación dinámica de clases —post_class()—, pero me parece más cómodo de la manera anterior, ya que te permite trabajar con nombres de clase normales, en tu idioma favorito, y no esas parrafadas del tipo «post-6 post type-post status-publish format-aside hentry category-sin-categoria» 😎 .

Fuera del loop

a) Entradas individuales adecuadas a cada formato
La técnica anterior permite hacer muchas cosas, pero para mostrar un tipo de entrada u otro en función del formato, creo que es más limpio usar subplantillas distintas, como hago en este blog para diferenciarlas entradas normales de las microentradas. Y para eso podemos utilizar otra función muy útil de WordPress: get_template_part (). Bueno, en realidad, tampoco es que sea tan espectacular, se podría conseguir lo mismo con un require de PHP, pero tiene su encanto.  😆
Lo que hace esta función es cargar una subplantilla en el archivo principal. Por ejemplo, para mostrar las entradas de un blog lo normal es hacerlo en el archivo single.php. Pero en este archivo se puede indicar que cargue una subplantilla en función del formato de entrada. Así, en mi blog, tengo dos de estas subplantillas —una es content-single.php, que es la que empleo para las entradas normales y otra es content-aside.php, que me sirve para las microentradas— y justo después de declarar el loop, cargo una u otra según el formato de entrada:
  1. <?php while ( have_posts() ) : the_post(); // #loop. ?>
  2. <?php // chequeamos que no tenga ningún formato wp (las entradas normales devuelven false) 
  3. $check_formato = get_post_format();
  4. /* Si tiene alguno, cargamos la plantilla específica, en este caso microentradas, de lo contrario, la normal (content-single) */
  5. if ($check_formato!=false) {
  6. get_template_part ( 'content', get_post_format() );
  7. } else {
  8. get_template_part( 'content', 'single' );
  9. } ?>
Explico esto un poco mejor.
En la línea 3 guardo en una variable la cadena de texto del tipo de formato ('aside', 'video', etcétera), que en caso de ser una entrada normal es false, es decir, nada.
En la línea 5 indico que si esa cadena no es false (!=false), mediante la función get_template_part me cargue la subplantilla de cada formato (content-aside.php, content-video.php, etcétera).
En la línea 6, con la función get_template_part(), concateno la primera cadena 'content' con la cadena que devuelve la función get_post_format() (aside, video...) añadiendo automáticamente un guion entremedias.
b) Archivo
El mismo procedimiento es el que se puede hacer en archive.php, que es la página que muestra todas las entradas de determinado parámetro (todas las de tal categoría, tag , fecha...), para cargar una subplantilla específica, como hago con archive-aside.php, que es mi tablón particular de post-it, añadiendo en la condición que no sea ni el archivo de fechas ni el de categorías ni el de tags.
  1. <?php $check_formato = get_post_format();
  2. if ($check_formato!=false && is_date()==false && is_category()==false && is_tag()==false) {
  3. get_template_part( 'archive', get_post_format() );
  4. } else {
  5. get_template_part( 'archive', 'single' );
  6. } ?>
Bueno, espero que haya quedado un poco más claro. Otro día profundizamos un poco más en el tema.
fuente:http://www.mmfilesi.com/blog/formatos-de-entrada-en-wordpress/

No hay comentarios.:

Publicar un comentario