Tags para los Custom Post Types

nube de tags

Ya existe mucha documentación sobre cómo crear taxonomías y cómo usarlas en los custom post types, pero… ¿cómo usar las taxonomías que usa WordPress por defecto? A esta pregunta no existe mucha documentación, y menos en español. Por esto, he decidido volver a escribir en TodoWP y hacer un pequeño manual de cómo usar específicamente tags en un tipo de post personalizado.

Los ingredientes para lograrlo son:

  1. La definición o declaración del post type
  2. La conexión del tipo de post con la taxonomía
  3. El cambio en el query por defecto

Lo primero es tener el custom post type:

register_post_type('alojamiento',
array(
'labels' => array(
'name' => 'Alojamientos',
'singular_name' => 'Alojamiento'
),
'capability_type' => 'post',
'public' => true,
'supports' => array('title','editor'),
'taxonomies' => array('post_tag')
)
);

Este es un ejemplo básico de cómo se registra un post type, lo importante en este ejemplo es la linea donde se registran las posibles taxonomías para este tipo.

'taxonomies' => array('post_tag')

Nota: en esta parte no es necesario poner todas las taxonomías que se usarían. Luego se pueden crear taxonomías personalizadas para usarlas con este tipo de post.

tags

Hasta el momento aun no ponemos usarla, ¿por qué? Porque el editor no nos mostrará la caja que permite agregar las etiquetas. Para esto nuestro segundo ingrediente.


register_taxonomy_for_object_type('post_tag', 'alojamiento');

Esta última linea se coloca también en la acción init, al igual que el register_post_type. Hasta el momento todo funciona perfecto, podemos crear custom post y asignarles etiquetas. Incluso si agregamos un widget con la nube de etiquetas aparecerán las que hayamos creado y nos indicará cuántos posts tienen esa etiqueta.

Pero aún hay un problema: si en esa nube de etiquetas entramos a ver el listado de posts no veremos los de tipo especial, incluso aparecerán los posts normales, pero no los especiales.

Para esto nuestro tercer ingrediente. El problema radica en que el query que internamente tiene WordPress en el momento de solicitar los contenidos que se pasan a la plantilla para ser mostrados no incluye los post types.


function agregar_los_custom_posts($query)
{
if(is_tag() && empty($query->query_vars['suppress_filters']))
{
$post_types = array('post', 'alojamiento');
$query->set('post_type', $post_types);
return $query;
}
}
add_filter( 'pre_get_posts', 'agregar_los_custom_posts' );

Este filtro logra agregar nuestro o nuestros tipos al query en caso necesario.

Espero que esto les ayude cuando estén en sus desarrollos. Comenten sus resultados.

Comentarios
  1. Interesante lo de las tags

    Escrito el30/01/2012
  2. Una pregunta, en que fichero debemos añadir la funcion: function agregar_los_custom_posts($query)

    Escrito el01/02/2012
  3. Barbio, en el functions.php debe ir el código

    Escrito el01/02/2012
  4. Buna información, voy a ponerla en práctica lo de los custom post types en algunos blogs que gestiono. Saludos

    Escrito el03/02/2012
  5. Hombre Man

    Excelente, el último paso era el que me faltaba. Muchas gracias.

    Escrito el06/02/2012
  6. Yo ya utilizaba los custom posts desde hace tiempo, pero esto me ayudó en optimizarlos bastante mejor.

    Escrito el14/02/2012
  7. Voy a probar con los códigos a ver que tal, gracias por la info, aunque veo que el blog se actualiza poco, es una pena

    Escrito el19/03/2012
  8. Gracias por la información, un saludo.

    Escrito el20/03/2012

DEJA TU COMENTARIO