Cómo registrar Custom Post Types con register_post_type

Contents

Cómo registrar Custom Post Types con register_post_type

En el desarrollo de sitios en WordPress, los Custom Post Types (CPT) ofrecen una forma poderosa de extender la funcionalidad nativa más allá de las entradas y páginas. Este artículo detalla paso a paso cómo crear, configurar y optimizar tus propios tipos de contenido usando la función register_post_type. Lo haremos con un enfoque profesional y minimalista, incluyendo ejemplos, buenas prácticas y enlaces oficiales.

1. Introducción a los Custom Post Types

Un Custom Post Type es un tipo de contenido personalizado que puedes registrar en WordPress. A diferencia de las entradas (post) y páginas (page), tus CPT pueden tener etiquetas, taxonomías, metaboxes y comportamientos propios.

  • Flexibilidad: Definir campos, plantillas y capacidades únicas.
  • Organización: Separar contenido por tipo (por ejemplo, eventos, portafolio, recetas).
  • Escalabilidad: Facilita la evolución de un sitio conforme crecen los requerimientos.

2. La función register_post_type

La función principal para registrar un CPT es register_post_type( post_type, args ). Se debe invocar dentro de un hook apropiado, normalmente init:

add_action(init, mi_registro_eventos)
function mi_registro_eventos() {
  labels = array(
    name               =gt Eventos,
    singular_name      =gt Evento,
    menu_name          =gt Eventos,
    name_admin_bar     =gt Evento,
    add_new            =gt Añadir nuevo,
    add_new_item       =gt Añadir nuevo evento,
    edit_item          =gt Editar evento,
    view_item          =gt Ver evento,
    all_items          =gt Todos los eventos,
    search_items       =gt Buscar eventos,
    not_found          =gt No se encontraron eventos,
    not_found_in_trash =gt No se encontraron eventos en la papelera
  )
  args = array(
    labels             =gt labels,
    public             =gt true,
    has_archive        =gt true,
    supports           =gt array(title,editor,thumbnail),
    rewrite            =gt array(slug =gt eventos),
  )
  register_post_type(evento, args)
}
  

3. Desglose de argumentos esenciales

Argumento Descripción
public Determina si el CPT es público (front-end) y aparece en admin.
labels Array con las etiquetas que verán los usuarios en el dashboard.
supports Define funcionalidades habilitadas: título, editor, autor, thumbnail, etc.
show_in_menu Ubicación en el menú de admin: true, false o slug de otro CPT.
has_archive Habilita página de archivo para el tipo de contenido.
rewrite Configura URLs amigables (slug, con/without front).

4. Labels: personalización al detalle

El array labels acepta más de 20 índices. Entre los más utilizados:

  • name: Nombre plural (p. ej. Eventos).
  • singular_name: Nombre singular (Evento).
  • add_new y add_new_item: Textos para añadir contenido.
  • all_items, search_items, not_found

5. Soportes y metaboxes

Con supports =gt array(...) eliges qué metaboxes aparecen al editar. Los más comunes:

  • title: Título.
  • editor: Contenido principal.
  • thumbnail: Imagen destacada.
  • excerpt: Extracto.
  • custom-fields: Campos personalizados.
  • comments: Comentarios.

6. Permalinks y rewrite rules

Para que las URLs de tu CPT funcionen correctamente, asegúrate de “refrescar” las reglas de reescritura al activar tu plugin o tema:

function activar_mi_plugin() {
  mi_registro_eventos()
  flush_rewrite_rules()
}
register_activation_hook(__FILE__, activar_mi_plugin)
  

En la desactivación, conviene limpiar:

function desactivar_mi_plugin() {
  unregister_post_type(evento)
  flush_rewrite_rules()
}
register_deactivation_hook(__FILE__, desactivar_mi_plugin)
  

7. Capabilities y seguridad

Controla quién puede ver o editar tu CPT con la opción capability_type y capabilities. Ejemplo:

args[capability_type] = array(evento,eventos)
args[map_meta_cap]    = true
  

Esto crea capacidades como edit_evento, publish_eventos… que puedes asignar a roles.

8. Taxonomías personalizadas

Mucha veces los CPT van de la mano de taxonomías propias. Regístralas con register_taxonomy:

add_action(init,mi_taxonomia_temas)
function mi_taxonomia_temas() {
  labels = array( name =gt Temas, singular_name =gt Tema )
  register_taxonomy(tema,evento, array(
    labels       =gt labels,
    hierarchical =gt true,
    show_ui      =gt true,
    rewrite      =gt array(slug =gt temas)
  ))
}
  

9. Buenas prácticas y depuración

  • Prefijos únicos: evita colisiones usando nombres propios (mi_evento en lugar de evento).
  • Internacionalización: envuelve textos con __() o _e().
  • Uso de Capabilities: no confíes solo en public para controlar permisos.
  • Depuración: utiliza plugins como Query Monitor para revisar consultas y errores.

10. Recursos adicionales

Conclusión

Registrar Custom Post Types con register_post_type es una de las técnicas más potentes para adaptar WordPress a necesidades específicas. Siguiendo este artículo tendrás las bases para crear contenido organizado, seguro y optimizado. ¡Manos a la obra!



Acepto donaciones de BAT's mediante el navegador Brave 🙂



Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *