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
yadd_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 deevento
). - 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 🙂 |