Revista Tecnología

Post personalizado en WordPress, ¿qué es y para qué sirve?

Publicado el 10 septiembre 2014 por Santi Navarro @santiacn

Si no hace mucho que has llegado al mundo WordPress quizás todavía no te suene el concepto de post personalizado (en inglés, custom post type) o tal vez te empiece a sonar y hayas realizado la búsqueda sobre el tema aterrizando en este artículo, cosa que me alegra.

En primer lugar anunciarte que el contenido de este artículo se centra principalmente en acercar los conceptos que envuelven a los custom post types y qué podemos hacer con ellos.

Empezaremos con el concepto principal.

¿Qué es un post personalizado?

Un custom post type nos permite agregar a nuestro WordPress un tipo de contenido diferente a los genéricos.

Este concepto nos permite añadir tantos tipos de contenidos diferentes como precisemos para administrarlos desde nuestro backend en WordPress.

Los tipos de contenido genéricos son los siguientes:

  • Post, tipo de contenido genérico de un blog.
  • Página, las podemos entender como elementos estáticos similares a los post. Otra de la caracterísitica que de las páginas es que podemos asignarles plantillas.
  • Adjunto, es un tipo de post que guarda la información de los elementos multimedia subidos a nuestro servidor.
  • Revisión, se emplea fundamentalmente para guardar borradores de los otros post types.
  • Menú de navegación, almacena la información de un elemento en el sistema de navegación.

De los descritos quizás los que más se asemejan a un post personalizado sean los dos primeros elementos que hemos visto, tanto el Post como la Página.

Para entender mejor el concepto vamos a poner un ejemplo, tenemos creado un sitio web de una juguetería, disponemos de una zona estática de información general y otra sección de blog.

Llegado el momento deseamos crear otra sección dinámica en la que vayamos publicando los juguetes que tenemos disponibles.

En este punto es donde entra en juego el concepto de custom post type, en este caso deseamos crear un tipo de post que sea Juguete, éste nos permitirá ir publicando posts de tipo Juguete.

Posteriormente deberíamos crear las plantillas (si así lo deseamos) para que mostraran la información sobre juguetes realizando las queries o consultas a esos post en particular.

post-personalizado-wordpress

¿Cómo definir un post personalizado?

El objetivo de definir un CTP (Custom post type) es que nos permita a través del backend poder añadir artículos con la información pertinente a nuesto tipo de post llamado Juguete.

Las funciones las podemos añadir directamente a nuestro functions.php del tema que tengamos activado.

Por otro lado, si vamos a crear muchos post personalizados es interesante añadir nuestras funciones directamente en un plugin para activarlo posteriormente desde nuestro backend.

A continuación vamos a definir las funciones que nos permite dar de alta este tipo de post y en este caso lo haremos a través de un plugin.

<?php
/*
Plugin Name: post-personalizados
Plugin URI: http://www.santinavarro.es
Description: Plugin para crear post personalizados
Author: Santi Navarro
Version: 1.0
Author URI: http://www.santinavarro.es
*/
 
add_action('init', 'juguete_init');
function juguete_init()
{
  $labels = array(
    'name' => _x('juguetes', 'post type general name'),
    'singular_name' => _x('juguete', 'post type singular name'),
    'add_new' => _x('Añadir', 'juguete'),
    'add_new_item' => __('Añadir nuevo juguete'),
    'edit_item' => __('Editar juguete'),
    'new_item' => __('Nuevo juguete'),
    'view_item' => __('Ver juguete'),
    'search_items' => __('Buscar juguete'),
    'not_found' =>  __('No se han encontrado juguetes'),
    'not_found_in_trash' => __('No se han encontrado juguetes en la papelera'),
    'menu_name' => 'juguetes'
 
  );
  $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'show_in_menu' => true,
    'query_var' => true,
    'rewrite' => true,
    'capability_type' => 'post',
    'has_archive' => true,
    'hierarchical' => false,
    'menu_position' => null,
    'supports' => array('title','editor','author','thumbnail','excerpt','comments', 'custom-fields'),
    'taxonomies' => array('category','post_tag',) /* Por defecto deseamos que emplee las categorías y etiquetas genericas de los post básicos, si no lo deseamos 
    las podemos eliminar del array.*/
  );
  register_post_type('juguetes',$args);
}
 
add_filter('post_updated_messages', 'mensajes_juguete_actualizado');
function mensajes_juguete_actualizado( $messages ) {
  global $post, $post_ID;
 
  $messages['juguete'] = array(
    0 => '', // Sin uso. Los mensajes comienzan con el índice 1.
    1 => sprintf( __('juguete actualizado. <a href="%s">Ver juguete</a>'), esc_url( get_permalink($post_ID) ) ),
    2 => __('Campo personalizado actualizado.'),
    3 => __('Campo personalizado actualizado.'),
    4 => __('juguete actualizado.'),
    /* Ojo: %s: fecha y hora de la revisión */
    5 => isset($_GET['revision']) ? sprintf( __('juguete restaurado a revisión desde el %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
    6 => sprintf( __('juguete publicado. <a href="%s">Ver juguete</a>'), esc_url( get_permalink($post_ID) ) ),
    7 => __('juguete grabado.'),
    8 => sprintf( __('juguete enviado. <a target="_blank" href="%s">Vista previa juguete</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
    9 => sprintf( __('juguete programado para: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Vista previa juguete</a>'),
      // Para formatos de fecha ver http://php.net/date
      date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
    10 => sprintf( __('Borrador de juguete actualizado. <a target="_blank" href="%s">Vista previa de juguete</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
  );
 
  return $messages;
}
?>

Como vemos en el código anterior hemos creado dos funciones, al primera nos permite dar de alta nuestro CPT y la segunda nos facilita la adición de los mensajes que se producen en el backend cuando realizamos alguna acción sobre el tipo de post Libro.

Simplemente bastaría con copiar este código en un fichero php en vuestra carpeta de plugins y nombrarlo como post-personalizados.php , posteriormente modificar los valores para que se corresponda con lo que vosotros precisais para crear el vuestro propio.

Tras esto vamos al administrador de plugins y activamos el mismo. De este modo ya tenemos creados.

Siempre es importante una vez demos de alta nuestro tipo de post ir a los enlaces permanentes y guardar de nuevo nuestro tipo de estructura para que una vez visitemos donde se visualizan nuestros artículos de Juguete se muestren correctamente.

¿Y cómo muestro los artículos almacenados?

En primer lugar entendemos que ya hemos añadido diferentes artículos en el CPT Juguete, ok? Por que sino difícilmente mostrará algo.

En segundo lugar si tienes activados los enlaces permanentes con estructura amigable podemos acceder a la url siguiente:

www.nombredetudominio.ext/nombredetupostpersonalizado

Debido a la jerarquía de plantillas normalmente en estos casos te mostrará los post que tengas en Juguetes mediante la plantilla archive.php.

De todas formas siempre puedes crear tu archive-nombredetupostpersonalizado.php con el fin de que muestre los artículos almacenados en Juguetes.

Conclusión

Hemos visto el concepto de post personalizado y cómo mediante un plugin es posible crear diferentes tipos de post, finalmente cómo podemos visualizar los mismos en una sección de nuestro website.

Espero que os sea de utilidad y antes de marcharos darle a compartir!

:)
Gracias por vuestro tiempo y un saludo.

Nota: Con el fin de ampliar información sobre el tema puedes consultar los siguientes enlaces que pertenecen al Codex.
Post Types
Register Post Type


Volver a la Portada de Logo Paperblog