{"id":185,"date":"2025-11-27T10:39:28","date_gmt":"2025-11-27T09:39:28","guid":{"rendered":"https:\/\/rudy.wpmarcas.com\/club\/?p=22"},"modified":"2025-11-27T10:39:28","modified_gmt":"2025-11-27T09:39:28","slug":"como-crear-cpts-custom-post-types-y-taxonomias-de-forma-sencilla","status":"publish","type":"post","link":"https:\/\/barronico.wpmarcas.com\/club\/como-crear-cpts-custom-post-types-y-taxonomias-de-forma-sencilla\/","title":{"rendered":"C\u00f3mo crear CPTs (Custom Post Types) y taxonom\u00edas de forma sencilla"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"185\" class=\"elementor elementor-185\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-59c3701 e-flex e-con-boxed e-con e-parent\" data-id=\"59c3701\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0015075 elementor-widget elementor-widget-image\" data-id=\"0015075\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/barronico.wpmarcas.com\/club\/wp-content\/uploads\/2025\/11\/Gemini_Generated_Image_10.webp\" class=\"attachment-large size-large wp-image-52\" alt=\"\" srcset=\"https:\/\/barronico.wpmarcas.com\/club\/wp-content\/uploads\/2025\/11\/Gemini_Generated_Image_10.webp 1024w, https:\/\/barronico.wpmarcas.com\/club\/wp-content\/uploads\/2025\/11\/Gemini_Generated_Image_10-300x300.webp 300w, https:\/\/barronico.wpmarcas.com\/club\/wp-content\/uploads\/2025\/11\/Gemini_Generated_Image_10-150x150.webp 150w, https:\/\/barronico.wpmarcas.com\/club\/wp-content\/uploads\/2025\/11\/Gemini_Generated_Image_10-768x768.webp 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a31a7a4 e-flex e-con-boxed e-con e-parent\" data-id=\"a31a7a4\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cdffdbe elementor-widget elementor-widget-text-editor\" data-id=\"cdffdbe\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2><b>Entendiendo los Custom Post Types<\/b><\/h2><p><span style=\"font-weight: 400;\">WordPress viene con tipos de contenido predefinidos (entradas, p\u00e1ginas, medios). Los Custom Post Types (CPT) te permiten crear tipos de contenido adicionales adaptados espec\u00edficamente a las necesidades de tu proyecto: portfolio, testimonios, productos, eventos, equipo, proyectos o cualquier entidad que requiera estructura propia.<\/span><\/p><h2><b>Por qu\u00e9 necesitas CPTs en proyectos profesionales<\/b><\/h2><p><span style=\"font-weight: 400;\">Los CPT organizan tu contenido de forma l\u00f3gica y escalable. Separar casos de estudio de entradas de blog, por ejemplo, facilita la gesti\u00f3n, permite templates espec\u00edficos para cada tipo y mejora la arquitectura de informaci\u00f3n. Adem\u00e1s, puedes asignar capacidades y permisos distintos seg\u00fan el tipo de contenido.<\/span><\/p><h3><b>Ventajas estructurales<\/b><\/h3><p><span style=\"font-weight: 400;\">Cada CPT puede tener sus propias taxonom\u00edas, campos personalizados, templates y ubicaciones en el admin. Esto mantiene tu interfaz administrativa limpia y enfocada. Los editores encuentran r\u00e1pidamente el tipo de contenido que necesitan sin navegar entre entradas mezcladas.<\/span><\/p><h2><b>M\u00e9todos para crear Custom Post Types<\/b><\/h2><p><span style=\"font-weight: 400;\">Existen tres aproximaciones principales: c\u00f3digo puro, plugins dedicados o page builders con funcionalidad integrada. Cada m\u00e9todo tiene sus ventajas seg\u00fan tu nivel t\u00e9cnico y requisitos del proyecto.<\/span><\/p><h3><b>M\u00e9todo 1: C\u00f3digo en functions.php<\/b><\/h3><p><span style=\"font-weight: 400;\">El m\u00e9todo m\u00e1s potente y flexible es registrar CPTs mediante c\u00f3digo. A\u00f1ade esto en el functions.php de tu tema o, preferiblemente, en un plugin personalizado:<\/span><\/p><p><span style=\"font-weight: 400;\">function crear_portfolio_cpt() {<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0$args = array(<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8216;labels&#8217; =&gt; array(<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8216;name&#8217; =&gt; &#8216;Portfolio&#8217;,<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8216;singular_name&#8217; =&gt; &#8216;Proyecto&#8217;<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8216;public&#8217; =&gt; true,<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8216;has_archive&#8217; =&gt; true,<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8216;supports&#8217; =&gt; array(&#8216;title&#8217;, &#8216;editor&#8217;, &#8216;thumbnail&#8217;, &#8216;excerpt&#8217;),<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8216;menu_icon&#8217; =&gt; &#8216;dashicons-portfolio&#8217;,<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8216;rewrite&#8217; =&gt; array(&#8216;slug&#8217; =&gt; &#8216;proyectos&#8217;),<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0);<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0register_post_type(&#8216;portfolio&#8217;, $args);<\/span><\/p><p><span style=\"font-weight: 400;\">}<\/span><\/p><p><span style=\"font-weight: 400;\">add_action(&#8216;init&#8217;, &#8216;crear_portfolio_cpt&#8217;);<\/span><\/p><p>\u00a0<\/p><p><span style=\"font-weight: 400;\">Esta aproximaci\u00f3n te da control total sobre cada par\u00e1metro: capacidades, jerarqu\u00eda, soporte de caracter\u00edsticas, posici\u00f3n en men\u00fa y estructura de URLs.<\/span><\/p><h3><b>M\u00e9todo 2: Custom Post Type UI<\/b><\/h3><p><span style=\"font-weight: 400;\">Para quienes prefieren interfaz visual, el plugin CPT UI ofrece formularios intuitivos para crear CPTs sin tocar c\u00f3digo. Es ideal para clientes no t\u00e9cnicos que necesitar\u00e1n gestionar tipos de contenido. La desventaja es la dependencia del plugin; si se desactiva, tus CPTs desaparecen hasta reactivarlo.<\/span><\/p><h3><b>M\u00e9todo 3: Advanced Custom Fields PRO<\/b><\/h3><p><span style=\"font-weight: 400;\">ACF PRO incluye funcionalidad para registrar CPTs directamente desde su interfaz. La ventaja es tener CPTs y campos personalizados gestionados desde un mismo lugar, ideal cuando trabajas extensivamente con ACF.<\/span><\/p><h2><b>Taxonom\u00edas personalizadas: organizando tu contenido<\/b><\/h2><p><span style=\"font-weight: 400;\">Las taxonom\u00edas son sistemas de clasificaci\u00f3n. WordPress incluye categor\u00edas y etiquetas, pero puedes crear taxonom\u00edas espec\u00edficas para tus CPTs: tipos de proyecto, tecnolog\u00edas utilizadas, sectores de actividad, ubicaciones geogr\u00e1ficas.<\/span><\/p><h3><b>Registro de taxonom\u00edas mediante c\u00f3digo<\/b><\/h3><p><span style=\"font-weight: 400;\">Similar a los CPTs, registras taxonom\u00edas con register_taxonomy:<\/span><\/p><p><span style=\"font-weight: 400;\">function crear_taxonomia_tecnologias() {<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0$args = array(<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8216;labels&#8217; =&gt; array(<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8216;name&#8217; =&gt; &#8216;Tecnolog\u00edas&#8217;,<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8216;singular_name&#8217; =&gt; &#8216;Tecnolog\u00eda&#8217;<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8216;hierarchical&#8217; =&gt; true,<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8216;show_in_rest&#8217; =&gt; true,<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8216;rewrite&#8217; =&gt; array(&#8216;slug&#8217; =&gt; &#8216;tecnologia&#8217;),<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0);<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0register_taxonomy(&#8216;tecnologia&#8217;, &#8216;portfolio&#8217;, $args);<\/span><\/p><p><span style=\"font-weight: 400;\">}<\/span><\/p><p><span style=\"font-weight: 400;\">add_action(&#8216;init&#8217;, &#8216;crear_taxonomia_tecnologias&#8217;);<\/span><\/p><p>\u00a0<\/p><p><span style=\"font-weight: 400;\">El par\u00e1metro hierarchical determina si funciona como categor\u00edas (jer\u00e1rquico, con padres e hijos) o como etiquetas (plano).<\/span><\/p><h2><b>Campos personalizados con Advanced Custom Fields<\/b><\/h2><p><span style=\"font-weight: 400;\">Una vez creados tus CPTs, probablemente necesites campos adicionales m\u00e1s all\u00e1 del t\u00edtulo y contenido. ACF permite a\u00f1adir campos de cualquier tipo: texto, imagen, fecha, relaci\u00f3n con otros posts, repetidores, grupos flexibles.<\/span><\/p><h3><b>Configuraci\u00f3n estrat\u00e9gica de campos<\/b><\/h3><p><span style=\"font-weight: 400;\">Crea grupos de campos espec\u00edficos para cada CPT. Para un CPT de \u00abEquipo\u00bb, podr\u00edas incluir cargo, biograf\u00eda corta, redes sociales y foto. Para \u00abEventos\u00bb, fecha de inicio\/fin, ubicaci\u00f3n, precio y enlace a entradas.<\/span><\/p><p><span style=\"font-weight: 400;\">Configura las ubicaciones de los grupos de campos para que aparezcan solo en los CPTs relevantes. Esto mantiene la interfaz de edici\u00f3n enfocada y evita confusi\u00f3n.<\/span><\/p><h2><b>Templates personalizados para CPTs<\/b><\/h2><p><span style=\"font-weight: 400;\">WordPress busca autom\u00e1ticamente templates espec\u00edficos seg\u00fan jerarqu\u00eda. Para mostrar un CPT llamado \u00abportfolio\u00bb, crea single-portfolio.php en tu tema. Para el archivo de todos los proyectos, archive-portfolio.php.<\/span><\/p><h3><b>Loops personalizados<\/b><\/h3><p><span style=\"font-weight: 400;\">Dentro de estos templates, construye loops espec\u00edficos que muestren exactamente la informaci\u00f3n relevante de cada CPT, accediendo a los campos personalizados que hayas creado:<\/span><\/p><p><span style=\"font-weight: 400;\">&lt;?php\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">$tecnologias = get_the_terms(get_the_ID(), &#8216;tecnologia&#8217;);<\/span><\/p><p><span style=\"font-weight: 400;\">echo get_field(&#8216;a\u00f1o_proyecto&#8217;);<\/span><\/p><p><span style=\"font-weight: 400;\">?&gt;<\/span><\/p><p>\u00a0<\/p><h2><b>Optimizaci\u00f3n SEO de CPTs<\/b><\/h2><p><span style=\"font-weight: 400;\">Configura URLs amigables mediante el par\u00e1metro rewrite. Activa has_archive si quieres una p\u00e1gina \u00edndice de todos los elementos. Aseg\u00farate de que show_in_rest est\u00e9 en true para compatibilidad con el editor de bloques y API REST.<\/span><\/p><p><span style=\"font-weight: 400;\">Utiliza plugins como Yoast SEO o Rank Math que reconocen autom\u00e1ticamente los CPTs y permiten configurar t\u00edtulos, descripciones y schemas espec\u00edficos para cada tipo.<\/span><\/p><h2><b>Buenas pr\u00e1cticas y consideraciones<\/b><\/h2><p><span style=\"font-weight: 400;\">Registra CPTs en un plugin personalizado en lugar del functions.php del tema. As\u00ed, si cambias de tema, mantienes tu estructura de contenido. Utiliza nombres de CPT en singular, min\u00fasculas y sin espacios ni caracteres especiales. Antes de lanzar, prueba exhaustivamente permisos y capacidades para asegurar que cada rol de usuario tenga el acceso apropiado.<\/span><\/p><p>\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Entendiendo los Custom Post Types WordPress viene con tipos de contenido predefinidos (entradas, p\u00e1ginas, medios). Los Custom Post Types (CPT) [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":189,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[6],"tags":[],"class_list":["post-185","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress"],"_links":{"self":[{"href":"https:\/\/barronico.wpmarcas.com\/club\/wp-json\/wp\/v2\/posts\/185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/barronico.wpmarcas.com\/club\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/barronico.wpmarcas.com\/club\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/barronico.wpmarcas.com\/club\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/barronico.wpmarcas.com\/club\/wp-json\/wp\/v2\/comments?post=185"}],"version-history":[{"count":0,"href":"https:\/\/barronico.wpmarcas.com\/club\/wp-json\/wp\/v2\/posts\/185\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/barronico.wpmarcas.com\/club\/wp-json\/wp\/v2\/media\/189"}],"wp:attachment":[{"href":"https:\/\/barronico.wpmarcas.com\/club\/wp-json\/wp\/v2\/media?parent=185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/barronico.wpmarcas.com\/club\/wp-json\/wp\/v2\/categories?post=185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/barronico.wpmarcas.com\/club\/wp-json\/wp\/v2\/tags?post=185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}