{"id":334784010,"date":"2025-12-11T17:55:39","date_gmt":"2025-12-11T12:25:39","guid":{"rendered":"https:\/\/dev.smackcoders.com\/construir-dinamicos-sitios-wordpress-con-tipos-post-personalizados.html"},"modified":"2026-03-06T11:13:07","modified_gmt":"2026-03-06T05:43:07","slug":"construir-dinamicos-sitios-wordpress-con-tipos-post-personalizados","status":"publish","type":"post","link":"https:\/\/dev.smackcoders.com\/es\/blog\/construir-dinamicos-sitios-wordpress-con-tipos-post-personalizados.html","title":{"rendered":"Creaci\u00f3n de sitios WordPress din\u00e1micos con tipos de publicaciones personalizados (Gu\u00eda paso a paso)"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"555\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/Building-Dynamic-WordPress-Sites-with-Custom-Post-Types-1024x555.webp\" alt=\"Building-Dynamic-WordPress-Sites-with-Custom-Post-Types\" class=\"wp-image-334781337\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/Building-Dynamic-WordPress-Sites-with-Custom-Post-Types-1024x555.webp 1024w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/Building-Dynamic-WordPress-Sites-with-Custom-Post-Types-300x162.webp 300w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/Building-Dynamic-WordPress-Sites-with-Custom-Post-Types-768x416.webp 768w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/Building-Dynamic-WordPress-Sites-with-Custom-Post-Types-1536x832.webp 1536w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/Building-Dynamic-WordPress-Sites-with-Custom-Post-Types-2048x1109.webp 2048w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/Building-Dynamic-WordPress-Sites-with-Custom-Post-Types-360x195.webp 360w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/Building-Dynamic-WordPress-Sites-with-Custom-Post-Types-600x325.webp 600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div class=\"wp-block-rank-math-toc-block has-black-color has-text-color has-background has-link-color wp-elements-02835ddf63e73d6a5e9ff25c64f7335a\" style=\"background-color:#fafafa\" id=\"rank-math-toc\"><h2>Table of Contents<\/h2><nav><ol><li><a href=\"#what-makes-a-word-press-site-dynamic\">&iquest;Qu&eacute; hace que un sitio WordPress sea din&aacute;mico?<\/a><\/li><li><a href=\"#how-to-create-a-custom-post-type-in-word-press\">C&oacute;mo crear un tipo de publicaci&oacute;n personalizado en WordPress<\/a><ol><li><a href=\"#creating-custom-post-types-with-plugins-no-code-method\">Creaci&oacute;n de tipos de publicaciones personalizados con plugins (m&eacute;todo sin c&oacute;digo)<\/a><ol><li><a href=\"#step-1-install-and-activate-the-plugin\">Paso 1: Instala y activa el plugin<\/a><\/li><li><a href=\"#step-2-create-your-first-custom-post-type\">Paso 2: Crea tu primer tipo de publicaci&oacute;n personalizada<\/a><\/li><\/ol><\/li><li><a href=\"#creating-custom-post-types-without-plugins-manual-dashboard-method\">Creaci&oacute;n de tipos de publicaciones personalizadas sin plugins (m&eacute;todo manual del panel de control)<\/a><ol><li><a href=\"#step-1-create-a-small-custom-plugin-for-your-cpt\">Paso 1: Crea un peque&ntilde;o plugin personalizado para tu CPT<\/a><\/li><li><a href=\"#step-2-register-your-custom-post-type\">Paso 2: Registra tu tipo de publicaci&oacute;n personalizada<\/a><\/li><li><a href=\"#step-3-create-custom-taxonomies-optional\">Paso 3: Crear taxonom&iacute;as personalizadas (opcional)<\/a><\/li><li><a href=\"#step-4-create-template-files-to-display-your-cpt\">Paso 4: Crea archivos plantilla para mostrar tu CPT<\/a><\/li><\/ol><\/li><li><a href=\"#creating-custom-post-types-programmatically-for-developers\">Creaci&oacute;n de tipos de publicaciones personalizados de forma program&aacute;tica (para desarrolladores)<\/a><ol><li><a href=\"#step-1-register-a-custom-post-type-with-code\">Paso 1: Registrar un tipo de publicaci&oacute;n personalizado con c&oacute;digo<\/a><\/li><li><a href=\"#step-2-add-custom-taxonomies-categories-or-tags\">Paso 2: A&ntilde;adir taxonom&iacute;as personalizadas (categor&iacute;as o etiquetas)<\/a><\/li><li><a href=\"#step-3-add-custom-fields-programmatically-optional\">Paso 3: A&ntilde;adir campos personalizados program&aacute;ticamente (opcional)<\/a><\/li><li><a href=\"#step-4-create-templates-for-your-cpt\">Paso 4: Crea plantillas para tu CPT<\/a><\/li><li><a href=\"#step-5-test-and-refine\">Paso 5: Probar y refinar<\/a><\/li><\/ol><\/li><li><a href=\"#advanced-setup-custom-post-types-with-categories-tags-and-relationships\">Tipos de publicaci&oacute;n personalizados de configuraci&oacute;n avanzada con categor&iacute;as, etiquetas y relaciones<\/a><ol><li><a href=\"#step-1-add-categories-or-tags-to-your-custom-post-type\">Paso 1: A&ntilde;adir categor&iacute;as o etiquetas a tu tipo de publicaci&oacute;n personalizada<\/a><\/li><li><a href=\"#step-2-create-custom-taxonomies-for-your-cpt\">Paso 2: Crea taxonom&iacute;as personalizadas para tu CPT<\/a><\/li><li><a href=\"#step-3-connect-custom-post-types-with-relationships\">Paso 3: Conecta los tipos de publicaciones personalizadas con las relaciones<\/a><\/li><li><a href=\"#step-4-display-relationships-on-the-frontend\">Paso 4: Mostrar las relaciones en el frontend<\/a><\/li><\/ol><\/li><\/ol><\/li><li><a href=\"#best-plugins-for-custom-post-types\">Mejores plugins para tipos de publicaciones personalizadas&nbsp;<\/a><ol><li><a href=\"#1-jet-engine\">1. Motor a reacci&oacute;n<\/a><\/li><li><a href=\"#2-meta-box\">2. Meta Box<\/a><\/li><li><a href=\"#3-advanced-custom-fields-acf\">3. Campos Personalizados Avanzados (ACF)<\/a><\/li><li><a href=\"#4-pods-framework\">4. Marco de Pods<\/a><\/li><li><a href=\"#5-toolset-types\">5. Tipos de herramientas<\/a><\/li><li><a href=\"#6-custom-post-type-ui-cpt-ui\">6. Interfaz de Tipo de Poste Personalizada (CPT UI)<\/a><\/li><li><a href=\"#final-verdict\">Veredicto final<\/a><\/li><\/ol><\/li><li><a href=\"#conclusion-turn-word-press-into-a-fully-dynamic-cms\">Conclusi&oacute;n: Convertir WordPress en un CMS completamente din&aacute;mico<\/a><\/li><li><a href=\"#fa-qs-everything-you-need-to-know-about-word-press-custom-post-types\">Preguntas frecuentes: Todo lo que necesitas saber sobre los tipos de publicaciones personalizadas en WordPress<\/a><ol><li><a href=\"#faq-question-1765178246421\">1. &iquest;Cu&aacute;l es la relaci&oacute;n entre los Tipos de Publicaci&oacute;n Personalizados y WordPress?<\/a><\/li><li><a href=\"#faq-question-1765178335937\">2. &iquest;C&oacute;mo muestro mi contenido de Tipo de Publicaci&oacute;n Personalizado en el front-end?<\/a><\/li><li><a href=\"#faq-question-1765178377637\">3. &iquest;C&oacute;mo a&ntilde;ado categor&iacute;as o etiquetas a mi Tipo de Publicaci&oacute;n Personalizada?<\/a><\/li><li><a href=\"#faq-question-1765178402085\">4. &iquest;Cu&aacute;l es la diferencia entre Tipos de Publicaciones Personalizadas y Campos Personalizados?<\/a><\/li><li><a href=\"#faq-question-1765178428797\">5. &iquest;Son los tipos de publicaciones personalizadas compatibles con el SEO?<\/a><\/li><li><a href=\"#faq-question-1765178454522\">6. &iquest;Puedo exportar o migrar mis CPTs a otro sitio?<\/a><\/li><\/ol><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-makes-a-word-press-site-dynamic\">\u00bfQu\u00e9 hace que un sitio WordPress sea din\u00e1mico?<\/h2>\n\n\n\n<p>Si alguna vez has sentido que tu sitio de WordPress parece demasiado \u00abest\u00e1tico\u00bb, no est\u00e1s solo. La mayor\u00eda de los sitios dependen de Posts y P\u00e1ginas, que son adecuados para blogs o sitios web sencillos, pero limitantes cuando necesitas algo m\u00e1s estructurado.<\/p>\n\n\n\n<p>Ah\u00ed es donde entran los Tipos de Publicaci\u00f3n Personalizados (CPTs). Te permiten organizar contenido m\u00e1s all\u00e1 de la configuraci\u00f3n predeterminada. \u00bfQuieres mostrar tus proyectos, mostrar a miembros del equipo, listar propiedades inmobiliarias o dirigir una biblioteca de cursos? Todo eso se vuelve sencillo una vez que usas los CPT.<\/p>\n\n\n\n<p>En resumen, los Tipos de Publicaci\u00f3n Personalizados transforman WordPress de una plataforma de blogs en un verdadero Sistema de Gesti\u00f3n de Contenidos (CMS). Te ayudan a gestionar diferentes tipos de datos de forma independiente, cada uno con sus propios campos, taxonom\u00edas y plantillas.<\/p>\n\n\n\n<p>Cuando empiezas a usar CPTs, pasas de ser \u00absolo otra p\u00e1gina web\u00bb a una din\u00e1mica <a href=\"https:\/\/dev.smackcoders.com\/wordpress.html\">WordPress<\/a> Sitio que est\u00e9 organizado, escalable y sea f\u00e1cil de mantener.<\/p>\n\n\n\n<p>Antes de entrar en las partes t\u00e9cnicas, esto es lo que esta gu\u00eda te guiar\u00e1 paso a paso, en un lenguaje sencillo. Tanto si eres desarrollador como si solo quieres una p\u00e1gina web m\u00e1s flexible, encontrar\u00e1s respuestas claras y ejemplos pr\u00e1cticos.<\/p>\n\n\n\n<p>Al final, sabr\u00e1s exactamente c\u00f3mo construir un sitio WordPress din\u00e1mico que sea flexible, escalable y amigable para el SEO.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-to-create-a-custom-post-type-in-word-press\">C\u00f3mo crear un tipo de publicaci\u00f3n personalizado en WordPress<\/h2>\n\n\n\n<p><a href=\"https:\/\/dev.smackcoders.com\/blog\/create-and-import-custom-post-types-in-wordpress.html\">Creaci\u00f3n de un tipo de publicaci\u00f3n personalizado<\/a> (CPT) en WordPress no es complicado; Solo necesitas el enfoque adecuado para tu nivel de habilidad. Existen m\u00e9todos probados, y ambos pueden ofrecer resultados potentes dependiendo de lo c\u00f3modo que te sientas con el c\u00f3digo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"creating-custom-post-types-with-plugins-no-code-method\">Creaci\u00f3n de tipos de publicaciones personalizados con plugins (m\u00e9todo sin c\u00f3digo)<\/h3>\n\n\n\n<p>Si quieres construir un sitio WordPress din\u00e1mico sin sumergirte en el c\u00f3digo, te va a encantar esta parte. Plugins como JetEngine, Meta Box y Advanced Custom Fields (ACF) pueden hacer todo el trabajo pesado; Solo tienes que se\u00f1alar, hacer clic y crear.<\/p>\n\n\n\n<p>Pi\u00e9nsalo como a\u00f1adir nuevas secciones a la \u00abbiblioteca de contenidos\u00bb de tu sitio web. En lugar de forzar todo en Publicaciones o P\u00e1ginas, puedes tener una secci\u00f3n solo para Proyectos, Testimonios o Cursos. Es m\u00e1s limpio, r\u00e1pido y mucho m\u00e1s f\u00e1cil de gestionar.<\/p>\n\n\n\n<p>Recorramos juntos paso a paso.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"step-1-install-and-activate-the-plugin\">Paso 1: Instala y activa el plugin<\/h4>\n\n\n\n<p>En este caso, usemos el plugin Meta Box AIO. Este plugin te permite crear y gestionar Tipos de Publicaci\u00f3n Personalizados a trav\u00e9s de tu panel de WordPress, sin necesidad de programaci\u00f3n ni confusi\u00f3n.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>En tu WordPress, ve a Plugins \u2192 A\u00f1adir nuevo.<\/li>\n\n\n\n<li>Sube el plugin AIO de Meta Box zip y pulsa Subir. Luego instala y act\u00edvala.<\/li>\n\n\n\n<li>Una vez activado, aparece un nuevo elemento de men\u00fa llamado \u00abMeta Box\u00bb en la barra lateral.<\/li>\n<\/ol>\n\n\n\n<p>Crear un nuevo tipo de publicaci\u00f3n personalizado &#8216;Projects&#8217; usando el plugin Meta Box, un enfoque sencillo y sin c\u00f3digo para organizar y mostrar contenido estructurado en WordPress.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"step-2-create-your-first-custom-post-type\">Paso 2: Crea tu primer tipo de publicaci\u00f3n personalizada<\/h4>\n\n\n\n<p>Ahora, vamos a hacer tu CPT de verdad.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Ve a Meta Box \u2192 Tipos de Publicaciones \u2192 A\u00f1adir Nuevo Tipo de Publicaci\u00f3n.<\/li>\n\n\n\n<li>Rellena los detalles clave como nombre, etiquetas, ajustes avanzados, taxonom\u00edas, etc.<\/li>\n\n\n\n<li>Haz clic en Publicar.<\/li>\n\n\n\n<li>Selecciona el enlace &#8216;A\u00f1adir campos personalizados al tipo de publicaci\u00f3n&#8217; desde la barra de notificaciones o en Meta Cuadro \u2192 Campos Personalizados para crear un nuevo grupo de campos.<\/li>\n\n\n\n<li>Haz clic en &#8216;A\u00f1adir nuevo grupo de campos&#8217; y empieza a a\u00f1adir nuevos campos. Una vez creada, asigna el tipo de publicaci\u00f3n usando los campos de ubicaci\u00f3n y haz clic en Guardar.<\/li>\n\n\n\n<li>Tu grupo de campo se asignar\u00e1 a la publicaci\u00f3n personalizada Proyectos.<\/li>\n<\/ol>\n\n\n\n<p>Ver\u00e1s al instante una nueva secci\u00f3n de Proyectos en la barra lateral, igual que \u00abPublicaciones\u00bb o \u00abP\u00e1ginas\u00bb.<\/p>\n\n\n\n<p>Comprobaci\u00f3n r\u00e1pida: Si haces clic en \u00abProyectos\u00bb, se abre un editor familiar donde puedes empezar a a\u00f1adir nuevas entradas de inmediato.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"creating-custom-post-types-without-plugins-manual-dashboard-method\">Creaci\u00f3n de tipos de publicaciones personalizadas sin plugins (m\u00e9todo manual del panel de control)<\/h3>\n\n\n\n<p>Si eres alguien que prefiere un poco m\u00e1s de control pero a\u00fan as\u00ed quiere evitar los plugins, este m\u00e9todo es para ti. Vas a hacer todo manualmente dentro de tu configuraci\u00f3n de WordPress, ligero, sin plugins y ideal para usuarios orientados al rendimiento.<\/p>\n\n\n\n<p>Este enfoque funciona muy bien si no quieres depender de herramientas adicionales o si desarrollas sitios de clientes donde menos plugins significan menos problemas de compatibilidad.<\/p>\n\n\n\n<p>Vamos a desglosarlo paso a paso.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"step-1-create-a-small-custom-plugin-for-your-cpt\">Paso 1: Crea un peque\u00f1o plugin personalizado para tu CPT<\/h4>\n\n\n\n<p>En lugar de editar el archivo functions.php de tu tema (que puede romperse durante las actualizaciones), crear\u00e1s un plugin ligero solo para tus Tipos de Publicaci\u00f3n Personalizados.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Abre tu carpeta de instalaci\u00f3n de WordPress a trav\u00e9s del Administrador de archivos o FTP.<\/li>\n<\/ol>\n\n\n\n<p>Navega para:<br>Plugins WP-Content \u2192<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Crea una carpeta nueva llamada my-custom-post-types.<\/li>\n\n\n\n<li>Dentro de \u00e9l, crea un archivo llamado my-custom-post-types.php.<\/li>\n<\/ol>\n\n\n\n<p>A\u00f1ade este c\u00f3digo inicial en la parte superior:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>&lt;?php<br>\/*** Nombre del plugin: Mis tipos de publicaciones personalizadas<br><br>* Descripci\u00f3n: Registra tipos de publicaciones personalizadas para tu sitio web.<br>* Versi\u00f3n: 1.0<br>* Autor: [Tu nombre]<br>*\/<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Guarda el archivo, ve a Dashboard \u2192 Plugins y activa mis tipos personalizados de publicaciones.<\/li>\n<\/ol>\n\n\n\n<p>Ahora tienes una base limpia para que tus CPT sean a prueba de futuro y de actualizaci\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"367\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/create-custom-post-type-plugin-file-1024x367.webp\" alt=\"create-custom-post-type-plugin-file\" class=\"wp-image-334781368\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/create-custom-post-type-plugin-file-1024x367.webp 1024w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/create-custom-post-type-plugin-file-300x108.webp 300w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/create-custom-post-type-plugin-file-768x276.webp 768w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/create-custom-post-type-plugin-file-1536x551.webp 1536w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/create-custom-post-type-plugin-file-360x129.webp 360w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/create-custom-post-type-plugin-file-600x215.webp 600w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/create-custom-post-type-plugin-file.webp 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Carpeta de plugins personalizada creada dentro de wp-content\/plugins que contiene el archivo PHP para registrar tipos de publicaciones personalizadas en WordPress.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"step-2-register-your-custom-post-type\">Paso 2: Registra tu tipo de publicaci\u00f3n personalizada<\/h4>\n\n\n\n<p>Ahora, vamos a a\u00f1adir c\u00f3digo para registrar tu CPT (como \u00abProyectos\u00bb). Abre tu archivo my-custom-post-types.php de nuevo y pega esto debajo de la cabecera:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>funci\u00f3n create_project_post_type() {<br>&nbsp;register_post_type(&#8216;proyecto&#8217;, array(&nbsp;&nbsp;&nbsp;<br>&nbsp;&#8216;etiquetas&#8217; =&gt; array(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;name&#8217; =&gt; __(&#8216;Proyectos&#8217;),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;singular_name&#8217; =&gt; __(&#8216;Proyecto&#8217;)&nbsp;&nbsp;&nbsp;&nbsp;<br>),&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;p\u00fablico&#8217; =&gt; cierto,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;has_archive&#8217; =&gt; cierto,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;show_in_rest&#8217; =&gt; cierto,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;menu_icon&#8217; =&gt; &#8216;dashicons-portfolio&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;supports&#8217; =&gt; array(&#8216;t\u00edtulo&#8217;, &#8216;editor&#8217;, &#8216;miniatura&#8217;, &#8216;extracto&#8217;),&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;rewrite&#8217; =&gt; array(&#8216;slug&#8217; =&gt; &#8216;projects&#8217;),&nbsp;&nbsp;<br>));<br>}<br>add_action(&#8216;init&#8217;, &#8216;create_project_post_type&#8217;);<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Esta funci\u00f3n le dice a WordPress todo lo que necesita saber sobre tu nuevo tipo de publicaci\u00f3n.<br>Despu\u00e9s de guardar, actualiza tu Panel de Control y ver\u00e1s aparecer \u00abProyectos\u00bb en la barra lateral.<\/p>\n\n\n\n<p><strong>Propina:<\/strong> Ve a Configuraci\u00f3n \u2192 Permalinks \u2192 guarda los cambios una vez para limpiar las reglas de reescritura. Esto garantiza que las URLs de tu nuevo CPT funcionen correctamente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"191\" height=\"341\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-dashboard-with-projects-menu.webp\" alt=\"wordpress-dashboard-with-projects-menu\" class=\"wp-image-334781401\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-dashboard-with-projects-menu.webp 191w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-dashboard-with-projects-menu-168x300.webp 168w\" sizes=\"(max-width: 191px) 100vw, 191px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"step-3-create-custom-taxonomies-optional\">Paso 3: <a href=\"https:\/\/dev.smackcoders.com\/blog\/create-custom-taxonomies-with-acf.html\">Crear taxonom\u00edas personalizadas<\/a> (Opcional)<\/h4>\n\n\n\n<p>Si quieres categor\u00edas o filtros para tu nuevo CPT, registra una taxonom\u00eda.<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; A\u00f1ade esto debajo de tu c\u00f3digo CPT:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>funci\u00f3n create_project_taxonomy() {&nbsp;&nbsp;<br>register_taxonomy(&#8216;tipo de proyecto&#8217;, &#8216;proyecto&#8217;, array(&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;label&#8217; =&gt; __(&#8216;Tipo de proyecto&#8217;),&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;jer\u00e1rquico&#8217; =&gt; cierto,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;rewrite&#8217; =&gt; array(&#8216;slug&#8217; =&gt; &#8216;tipo de proyecto&#8217;),&nbsp;&nbsp;<br>));<br>}<br>add_action(&#8216;init&#8217;, &#8216;create_project_taxonomy&#8217;);<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Esto a\u00f1ade una taxonom\u00eda de tipo de proyecto en tu men\u00fa CPT.<br>Ahora puedes agrupar tus proyectos por tipo (como Dise\u00f1o Web, Branding, etc.).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"697\" height=\"381\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-projects-post-list.webp\" alt=\"wordpress-projects-post-list\" class=\"wp-image-334781413\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-projects-post-list.webp 697w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-projects-post-list-300x164.webp 300w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-projects-post-list-360x197.webp 360w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-projects-post-list-600x328.webp 600w\" sizes=\"(max-width: 697px) 100vw, 697px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"step-4-create-template-files-to-display-your-cpt\">Paso 4: Crea archivos plantilla para mostrar tu CPT<\/h4>\n\n\n\n<p>Por \u00faltimo, hag\u00e1moslo visible en la parte frontal.<br>Dentro de tu carpeta de temas activos, crea dos archivos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>single-project.php muestra una \u00fanica publicaci\u00f3n de proyecto<\/li>\n\n\n\n<li>archive-project.php enumera todos tus proyectos<\/li>\n<\/ul>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;En archive-project.php, puedes empezar con:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>En archive-project.php, puedes empezar con:<br>&lt;?php get_header(); ?&gt;&nbsp;&nbsp;<br>&lt;h1&gt;Nuestros proyectos&lt;\/h1&gt;&nbsp;&nbsp;<br>&lt;?php&nbsp;&nbsp;<br>si ( have_posts() ) :&nbsp;&nbsp;&nbsp;&nbsp;<br>mientras que ( have_posts() ) : the_post();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>the_title(&#8216;&lt;h2&gt;&#8217;, \u00bb&lt;\/h2&gt;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>the_excerpt();&nbsp;&nbsp;&nbsp;&nbsp;<br>Endwhile;&nbsp;&nbsp;<br>endif;&nbsp;&nbsp;<br>?&gt;<br>&lt;?php get_footer(); ?&gt;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Guarda y visita yourdomain.com\/projects. Tu nuevo archivo aparecer\u00e1 autom\u00e1ticamente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"351\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-theme-folder-with-project-templates-1024x351.webp\" alt=\"wordpress-theme-folder-with-project-templates\" class=\"wp-image-334781416\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-theme-folder-with-project-templates-1024x351.webp 1024w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-theme-folder-with-project-templates-300x103.webp 300w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-theme-folder-with-project-templates-768x264.webp 768w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-theme-folder-with-project-templates-1536x527.webp 1536w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-theme-folder-with-project-templates-360x124.webp 360w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-theme-folder-with-project-templates-600x206.webp 600w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-theme-folder-with-project-templates.webp 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Carpeta activa de temas (Twenty Twenty-Four) que muestra archivos plantillas personalizadas, archive-project.php y single-project.php, a\u00f1adidas para mostrar archivos de proyectos y p\u00e1ginas individuales de proyecto.\u00bb<\/p>\n\n\n\n<p><strong>\u00bfPor qu\u00e9 optar por no usar plugins?<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No dependen de plugins de terceros.<\/li>\n\n\n\n<li>Rendimiento m\u00e1s r\u00e1pido y menos riesgos de seguridad.<\/li>\n\n\n\n<li>F\u00e1cil de mover entre temas o servidores.<\/li>\n<\/ul>\n\n\n\n<p>Este m\u00e9todo es ideal para desarrolladores o agencias que gestionan m\u00faltiples proyectos WordPress: simple, limpio y eficiente.<\/p>\n\n\n\n    <!-- Your HTML content starts here -->\n<section style=\"background-color: #f5f5f5; display:flex; justify-content: center; padding:4% 2%;\">\n\t<div class=\"container\" style=\"display:flex; padding: 1.4rem; border-radius: 10px; flex-wrap:wrap; box-shadow: 0px 0px 45px 0.1px #ddd; width: 70%; background: #fff;\">\n\t\t\t\t\t<div style=\"margin-right: 10px; width: 18%;\">\n\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2023\/11\/WordPress_Ultimate_CSV_-XML_Importer_Pro.webp\" alt=\"WP Ultimate CSV Importer Pro\" width=\"120px\">\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div style=\"width: 80%;\">\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<div class=\"\">\n\t\t\t\t\t\t\t\t<p style=\"margin-top: 0px; font-weight: 600;\">WP Ultimate CSV Importer Pro<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<p style=\"font-size: 16px; line-height: 1.8em;\">Get Ultimate CSV\/XML Importer to import data on WordPress faster, quicker and safer.<\/p>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div style=\"display: flex; justify-content: center; align-items:center; width:100%;\">\n\t\t\t\t\t\t<button style=\"border-radius: 3px; padding: 10px 20px;border: none; box-shadow: 0px 0px 8px #ccc; background-color: #E91F1F;\">\n\t\t\t\t\t\t\t\t<a href=\"https:\/\/dev.smackcoders.com\/wp-ultimate-csv-importer-pro.html?utm_source=website&amp;utm_medium=sm_cta&amp;utm_campaign=csv_importer_pro_cta_banner\" style=\"color: #fff !important\">\n\t\t\t\t\t\t\t\t\tGrab it Now <b>$299\/-<\/b>\n\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/button>\n\t\t\t\t\t<\/div>\n\t<\/div>\n<\/section>\n    <!-- Shortcode HTML content ends here -->\n\t\n\n\n\n<h3 class=\"wp-block-heading\" id=\"creating-custom-post-types-programmatically-for-developers\">Creaci\u00f3n de tipos de publicaciones personalizados de forma program\u00e1tica (para desarrolladores)<\/h3>\n\n\n\n<p>Si te encanta tener control total sobre tu entorno WordPress, este es para ti.<\/p>\n\n\n\n<p>Crear tipos de publicaci\u00f3n personalizados de forma program\u00e1tica significa escribir tu propio c\u00f3digo, registrar los tipos de publicaciones, campos y plantillas exactamente como quieres. Es m\u00e1s limpio, r\u00e1pido y evita la sobrecarga de plugins.<\/p>\n\n\n\n<p>Este es el m\u00e9todo que prefieren los desarrolladores profesionales de WordPress cuando el rendimiento, la seguridad y la flexibilidad son lo m\u00e1s importante. Veamos c\u00f3mo hacerlo bien.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"step-1-register-a-custom-post-type-with-code\">Paso 1: Registrar un tipo de publicaci\u00f3n personalizado con c\u00f3digo<\/h4>\n\n\n\n<p>Para crear tu propio Tipo de Publicaci\u00f3n Personalizado, abre tu <strong>functions.php<\/strong> (o tu peque\u00f1o archivo de plugin, como se explic\u00f3 antes) y pega este c\u00f3digo:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>funci\u00f3n create_portfolio_post_type() {&nbsp;&nbsp;<br>$labels = array(&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;name&#8217; =&gt; &#8216;Portfolios&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;singular_name&#8217; =&gt; &#8216;Portafolio&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;menu_name&#8217; =&gt; &#8216;Portafolios&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;add_new&#8217; =&gt; &#8216;A\u00f1adir nuevo portafolio&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;add_new_item&#8217; =&gt; &#8216;A\u00f1adir nuevo portafolio&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;edit_item&#8217; =&gt; &#8216;Editar Portafolio&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;new_item&#8217; =&gt; &#8216;Nuevo Portafolio&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;view_item&#8217; =&gt; &#8216;Ver portafolio&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;search_items&#8217; =&gt; &#8216;Portafolios de b\u00fasqueda&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;not_found&#8217; =&gt; &#8216;No se han encontrado carteras&#8217;,&nbsp;&nbsp;<br>);&nbsp;&nbsp;<br>$args = array(&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;etiquetas&#8217; =&gt; $labels,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;p\u00fablico&#8217; =&gt; cierto,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;has_archive&#8217; =&gt; cierto,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;rewrite&#8217; =&gt; array(&#8216;slug&#8217; =&gt; &#8216;portfolio&#8217;),&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;menu_icon&#8217; =&gt; &#8216;dashicons-portfolio&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;show_in_rest&#8217; =&gt; cierto,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;supports&#8217; =&gt; array(&#8216;title&#8217;, &#8216;editor&#8217;, &#8216;miniatura&#8217;, &#8216;extracto&#8217;, &#8216;campos personalizados&#8217;),&nbsp;&nbsp;<br>);&nbsp;&nbsp;<br>register_post_type(&#8216;portafolio&#8217;, $args);<br>}<br>add_action(&#8216;init&#8217;, &#8216;create_portfolio_post_type&#8217;);<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Este fragmento hace de todo, desde nombrar tu CPT hasta habilitar Gutenberg y archivos.<br>Una vez guardado, actualiza tu Panel de WordPress y ver\u00e1s un nuevo elemento de men\u00fa llamado Portafolios.<\/p>\n\n\n\n<p><strong>Propina: <\/strong>Despu\u00e9s de a\u00f1adir nuevos CPTs, ve siempre a Configuraci\u00f3n \u2192 Permalinks \u2192 Guardar cambios para actualizar las estructuras de URL.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"406\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/register-custom-post-type-plugin-code-and-dashboard-1024x406.webp\" alt=\"register-custom-post-type-plugin-code-and-dashboard\" class=\"wp-image-334781383\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/register-custom-post-type-plugin-code-and-dashboard-1024x406.webp 1024w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/register-custom-post-type-plugin-code-and-dashboard-300x119.webp 300w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/register-custom-post-type-plugin-code-and-dashboard-768x305.webp 768w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/register-custom-post-type-plugin-code-and-dashboard-1536x610.webp 1536w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/register-custom-post-type-plugin-code-and-dashboard-360x143.webp 360w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/register-custom-post-type-plugin-code-and-dashboard-600x238.webp 600w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/register-custom-post-type-plugin-code-and-dashboard.webp 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"step-2-add-custom-taxonomies-categories-or-tags\"><strong>Paso 2: A\u00f1adir taxonom\u00edas personalizadas (categor\u00edas o etiquetas)<\/strong><\/h4>\n\n\n\n<p>Las taxonom\u00edas personalizadas te permiten categorizar tus elementos CPT igual que las entradas de blog. A\u00f1ade esto debajo de tu c\u00f3digo de registro CPT en el mismo archivo: my-custom-type.php<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>funci\u00f3n create_portfolio_taxonomy() {. <br>register_taxonomy<br>(<br>&#8216;categor\u00eda de cartera&#8217;, <br>&#8216;portafolio&#8217;, matriz<br>(&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;label&#8217; =&gt; &#8216;Categor\u00edas de Portafolio&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;jer\u00e1rquico&#8217; =&gt; cierto,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;rewrite&#8217; =&gt; array<br>(&#8216;slug&#8217; =&gt; &#8216;categor\u00eda de portafolio&#8217;),&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;show_in_rest&#8217; =&gt; cierto,&nbsp;&nbsp;<br>));<br>}<br>add_action(&#8216;init&#8217;, &#8216;create_portfolio_taxonomy&#8217;);<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Ahora tus \u00abPortfolios\u00bb tambi\u00e9n tendr\u00e1n categor\u00edas, perfectas para filtrar o agrupar contenido optimizado para SEO.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"896\" height=\"728\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-portfolios-custom-post-type-menu.webp\" alt=\"wordpress-portfolios-custom-post-type-menu\" class=\"wp-image-334781404\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-portfolios-custom-post-type-menu.webp 896w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-portfolios-custom-post-type-menu-300x244.webp 300w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-portfolios-custom-post-type-menu-768x624.webp 768w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-portfolios-custom-post-type-menu-360x293.webp 360w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-portfolios-custom-post-type-menu-600x488.webp 600w\" sizes=\"(max-width: 896px) 100vw, 896px\" \/><\/figure>\n\n\n\n<p>Panel de WordPress que muestra la taxonom\u00eda personalizada de &#8216;Categor\u00edas de Portafolio&#8217; que aparece en el men\u00fa de Portafolios para la gesti\u00f3n organizada de contenidos.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"step-3-add-custom-fields-programmatically-optional\"><strong>Paso 3: A\u00f1adir campos personalizados program\u00e1ticamente (opcional)<\/strong><\/h4>\n\n\n\n<p>Para usuarios avanzados, puedes registrar meta-cajas o usar funciones de campo personalizadas sin plugins. Ejemplo:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>funci\u00f3n portfolio_meta_box() {&nbsp;&nbsp;<br>add_meta_box(&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;portfolio_details&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;Detalles del portafolio&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;portfolio_meta_callback&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;cartera&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;normal&#8217;,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;Alto&#8217;&nbsp;&nbsp;<br>);<br>}<br>add_action(&#8216;add_meta_boxes&#8217;, &#8216;portfolio_meta_box&#8217;);<br>funci\u00f3n portfolio_meta_callback($post) {&nbsp;&nbsp;<br>$client = get_post_meta($post-&gt;ID, &#8216;client_name&#8217;, verdadero);&nbsp;&nbsp;<br>echo &#8216;&lt;label&gt;Nombre del cliente:&lt;\/label&gt;&#8217;;&nbsp;&nbsp;<br>echo &#8216;&lt;input type=\u00bbtext\u00bb name=\u00bbclient_name\u00bb value=\u00bb&#8216; . esc_attr($client) . &#8216;\u00bb class=\u00bbwidefat\u00bb&gt;&#8217;;<br>}<br>funci\u00f3n save_portfolio_meta($post_id) {&nbsp;&nbsp;<br>si (array_key_exists(&#8216;client_name&#8217;, $_POST)) {&nbsp;&nbsp;&nbsp;&nbsp;<br>update_post_meta($post_id, &#8216;client_name&#8217;, $_POST[&#8216;client_name&#8217;]);&nbsp;&nbsp;<br>}<br>}<br>add_action(&#8216;save_post&#8217;, &#8216;save_portfolio_meta&#8217;);<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Esto a\u00f1ade un cuadro de entrada de Nombre del Cliente dentro de la pantalla de edici\u00f3n del Portafolio.<br>Puedes repetir esta l\u00f3gica en otros campos como \u00abURL del proyecto\u00bb o \u00abFecha de finalizaci\u00f3n\u00bb.<\/p>\n\n\n\n<p>Editor de publicaciones de portafolio de WordPress que muestra un campo personalizado de \u00abNombre del cliente\u00bb a\u00f1adido mediante Campos Personalizados Avanzados para una mejor gesti\u00f3n de los datos del proyecto.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"step-4-create-templates-for-your-cpt\">Paso 4: Crea plantillas para tu CPT<\/h4>\n\n\n\n<p>La configuraci\u00f3n program\u00e1tica no est\u00e1 completa hasta que dise\u00f1as c\u00f3mo se ve tu CPT en el frontend.<br>En tu carpeta de temas activos, crea:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>single-portfolio.php \u2192 Muestra publicaciones individuales de Portfolio<\/li>\n\n\n\n<li>archive-portfolio.php \u2192 Lista de todas las entradas del portafolio<\/li>\n<\/ul>\n\n\n\n<p>A\u00f1ade esto a archive-portfolio.php como punto de partida:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>&lt;?php get_header(); ?&gt;<br>&lt;h1&gt;Nuestro Portafolio&lt;\/h1&gt;<br>&lt;?php<br>si ( have_posts() ) :&nbsp;&nbsp;<br>mientras que ( have_posts() ) ): the_post(); ?&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br>&lt;article&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;\/h2&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&lt;?php the_post_thumbnail(&#8216;medio&#8217;); ?&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&lt;?php the_excerpt(); ?&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br>&lt;\/article&gt;&nbsp;&nbsp;<br>&lt;?php endwhile;<br>endif;<br>?&gt;<br>&lt;?php get_footer(); ?&gt;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Esta plantilla recorre todas las publicaciones del Portafolio y muestra el t\u00edtulo, la imagen y el extracto.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"step-5-test-and-refine\">Paso 5: Probar y refinar<\/h4>\n\n\n\n<p>Ahora, ve a tu panel de control, crea algunas entradas de Portfolio y pru\u00e9balas en el frontend. Ajusta tu plantilla y la visualizaci\u00f3n de campos hasta que encaje con el estilo de tu sitio.<\/p>\n\n\n\n<p>Cuando se hace bien, tu CPT se comportar\u00e1 como cualquier parte nativa de WordPress, solo que m\u00e1s potente.<\/p>\n\n\n\n<p><strong>Perspectiva del desarrollador: <\/strong>Este m\u00e9todo asegura cero sobrecarga de plugins y el m\u00e1ximo rendimiento. As\u00ed es como las agencias profesionales de WordPress gestionan contenido personalizado para sitios web de alto tr\u00e1fico.<\/p>\n\n\n\n<p><strong>\u00bfPor qu\u00e9 optar por la program\u00e1tica?<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Velocidad:<\/strong> Sin sobrecarga innecesaria de plugins.<\/li>\n\n\n\n<li><strong>Seguridad:<\/strong> Controlas cada l\u00ednea de c\u00f3digo.<\/li>\n\n\n\n<li><strong>Escalabilidad:<\/strong> Perfecto para grandes builds personalizadas de WordPress.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"advanced-setup-custom-post-types-with-categories-tags-and-relationships\">Tipos de publicaci\u00f3n personalizados de configuraci\u00f3n avanzada con categor\u00edas, etiquetas y relaciones<\/h3>\n\n\n\n<p>Ya tienes tus Tipos de Publicaciones Personalizados en marcha, buen trabajo.<br>Ahora es el momento de hacerlos realmente din\u00e1micos conect\u00e1ndolos con categor\u00edas, etiquetas y relaciones. Aqu\u00ed es donde tu sitio se vuelve estructurado, interactivo y escalable, como una base de datos real de contenido en lugar de solo una colecci\u00f3n de publicaciones.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"step-1-add-categories-or-tags-to-your-custom-post-type\"><strong>Paso 1: A\u00f1adir categor\u00edas o etiquetas a tu tipo de publicaci\u00f3n personalizada<\/strong><\/h4>\n\n\n\n<p>Por defecto, tus nuevos CPTs no tienen Categor\u00edas o Etiquetas asociadas, pero WordPress te permite a\u00f1adirlas f\u00e1cilmente.<\/p>\n\n\n\n<p>Si registraste tu CPT mediante c\u00f3digo, simplemente modifica tus argumentos e incluye esta l\u00ednea dentro del $args array:<\/p>\n\n\n\n<p>&#8216;taxonom\u00edas&#8217; =&gt; arreglo(&#8216;categor\u00eda&#8217;, &#8216;post_tag&#8217;),<\/p>\n\n\n\n<p>Si has usado la interfaz de Tipo de Publicaci\u00f3n Personalizada, abre tu tipo de publicaci\u00f3n y marca \u00abAdjuntar taxonom\u00edas existentes\u00bb \u2192 Categor\u00eda y Etiqueta.<\/p>\n\n\n\n<p>Ahora tu tipo de publicaci\u00f3n personalizada soportar\u00e1 todas las categor\u00edas y etiquetas existentes del blog, ayudando tanto a usuarios como a motores de b\u00fasqueda a entender mejor tu contenido.<\/p>\n\n\n\n<p><strong>Propina: <\/strong>Para tener m\u00e1s control, crea taxonom\u00edas personalizadas (como \u00abTipo de proyecto\u00bb o \u00abNivel de curso\u00bb). Hacen que tu organizaci\u00f3n web sea m\u00e1s limpia y m\u00e1s amigable con el SEO.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"894\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/cpt-ui-create-portfolio-post-type-screen-1024x894.webp\" alt=\"cpt-ui-create-portfolio-post-type-screen\" class=\"wp-image-334781365\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/cpt-ui-create-portfolio-post-type-screen-1024x894.webp 1024w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/cpt-ui-create-portfolio-post-type-screen-300x262.webp 300w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/cpt-ui-create-portfolio-post-type-screen-768x671.webp 768w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/cpt-ui-create-portfolio-post-type-screen-360x314.webp 360w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/cpt-ui-create-portfolio-post-type-screen-600x524.webp 600w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/cpt-ui-create-portfolio-post-type-screen.webp 1405w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Pantalla de Editar Tipo de publicaci\u00f3n de la interfaz CPT mostrando el tipo de publicaci\u00f3n del portafolio con las categor\u00edas y etiquetas predeterminadas de WordPress activadas para una organizaci\u00f3n flexible de contenido.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"step-2-create-custom-taxonomies-for-your-cpt\"><strong>Paso 2: Crea taxonom\u00edas personalizadas para tu CPT<\/strong><\/h4>\n\n\n\n<p>Las taxonom\u00edas personalizadas permiten agrupar el contenido bajo filtros espec\u00edficos de dominio, no solo gen\u00e9ricos como \u00abSin categorizar\u00bb.<\/p>\n\n\n\n<p>Ejemplo: Est\u00e1s creando una p\u00e1gina web de curso. Podr\u00edas crear una taxonom\u00eda llamada Nivel de Curso con valores como Principiante, Intermedio y Avanzado.<\/p>\n\n\n\n<p>Aqu\u00ed est\u00e1 el c\u00f3digo:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>funci\u00f3n create_course_taxonomy() {&nbsp;&nbsp;<br>register_taxonomy(&#8216;nivel de curso&#8217;, &#8216;curso&#8217;, array(&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;etiqueta&#8217; =&gt; __(&#8216;Nivel de curso&#8217;),&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;jer\u00e1rquico&#8217; =&gt; cierto,&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;rewrite&#8217; =&gt; array(&#8216;slug&#8217; =&gt; &#8216;nivel de curso&#8217;),&nbsp;&nbsp;&nbsp;&nbsp;<br>&#8216;show_in_rest&#8217; =&gt; cierto&nbsp;&nbsp;<br>));<br>}<br>add_action(&#8216;init&#8217;, &#8216;create_course_taxonomy&#8217;);<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Esto te da una nueva secci\u00f3n de taxonom\u00eda en el men\u00fa CPT del panel de control.<br>Cuando editas una publicaci\u00f3n de curso, ver\u00e1s una casilla de \u00abNivel de curso\u00bb donde puedes asignar niveles f\u00e1cilmente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"387\" height=\"188\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-courses-custom-post-type-menu.webp\" alt=\"wordpress-courses-custom-post-type-menu\" class=\"wp-image-334781395\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-courses-custom-post-type-menu.webp 387w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-courses-custom-post-type-menu-300x146.webp 300w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-courses-custom-post-type-menu-360x175.webp 360w\" sizes=\"(max-width: 387px) 100vw, 387px\" \/><\/figure>\n\n\n\n<p>Panel de WordPress que muestra la taxonom\u00eda personalizada \u00abNivel de curso\u00bb anidada bajo el tipo de publicaci\u00f3n Cursos para una mejor categorizaci\u00f3n de cursos.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"step-3-connect-custom-post-types-with-relationships\"><strong>Paso 3: Conecta los tipos de publicaciones personalizadas con las relaciones<\/strong><\/h4>\n\n\n\n<p>Las relaciones ayudan a vincular un CPT con otro, por ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Eventos vinculados a los recintos<\/li>\n\n\n\n<li>Cursos vinculados a los instructores<\/li>\n\n\n\n<li>Proyectos vinculados a clientes<\/li>\n<\/ul>\n\n\n\n<p>La forma m\u00e1s sencilla es usar <a href=\"https:\/\/stackoverflow.com\/questions\/27403089\/acf-relationship-fields-get-field-values-from-other-post-type\" target=\"_blank\" rel=\"noopener\"><strong>Campos de Relaciones ACF<\/strong><\/a> o el <a href=\"https:\/\/wordpress.org\/plugins\/meta-box\/\" target=\"_blank\" rel=\"noopener\"><strong>Meta Box<\/strong><\/a><strong> <\/strong>Plugin.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Ve a Campos Personalizados \u2192 A\u00f1adir Nuevo.<\/li>\n\n\n\n<li>A\u00f1ade un campo de relaciones.<\/li>\n\n\n\n<li>Elige el CPT objetivo (por ejemplo, conecta eventos \u2192 sedes).<\/li>\n\n\n\n<li>Gu\u00e1rdalo y asignarlo a tu CPT.<\/li>\n<\/ol>\n\n\n\n<p>Ahora, al editar un evento, puedes seleccionar su sede desde un desplegable y mostrarlo en el frontend con una sencilla etiqueta de plantilla ACF:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>&lt;?php<br>$related_sedes = get_field(&#8216;related_venues&#8217;);<br>if ($related_locales):&nbsp;&nbsp;<br>foreach ($related_venues as $venue) :&nbsp;&nbsp;&nbsp;&nbsp;<br>eco &#8216;&lt;p&gt;&#8217;. get_the_title($venue-&gt;ID) . &#8216;&lt;\/p&gt;&#8217;;&nbsp;&nbsp;<br>Endforeach;<br>endif;<br>?&gt;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Consejo profesional<\/strong>: Las relaciones hacen que tu contenido sea m\u00e1s inteligente, evitan duplicaciones, mejoran el SEO mediante enlaces contextuales y aportan profundidad a tu experiencia de usuario.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"step-4-display-relationships-on-the-frontend\">Paso 4: Mostrar las relaciones en el frontend<\/h4>\n\n\n\n<p>Una vez que tus CPTs est\u00e9n vinculados, puedes mostrar elementos relacionados en plantillas o barras laterales.<\/p>\n\n\n\n<p>Ejemplo: En una p\u00e1gina de curso, muestra la informaci\u00f3n del profesor y los cursos relacionados. Esto se puede hacer con <a href=\"https:\/\/www.advancedcustomfields.com\/resources\/relationship\/\" target=\"_blank\" rel=\"noopener\">Funciones de relaci\u00f3n de la ACF<\/a> o <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/\" target=\"_blank\" rel=\"noopener\">WP_Query bucles.<\/a><\/p>\n\n\n\n<p><strong>Resultado: <\/strong>Los visitantes ven conexiones estructuradas que aumentan autom\u00e1ticamente la interacci\u00f3n y la vinculaci\u00f3n interna.<\/p>\n\n\n\n<p><strong>Por qu\u00e9 importa la configuraci\u00f3n avanzada<\/strong><\/p>\n\n\n\n<p>Cuando tus CPTs est\u00e1n vinculados a trav\u00e9s de categor\u00edas, etiquetas y relaciones, tu sitio se transforma en un verdadero ecosistema de contenido.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Navegaci\u00f3n y filtrado m\u00e1s sencillos para los visitantes<\/li>\n\n\n\n<li>Un enlace interno m\u00e1s fuerte (victoria SEO)<\/li>\n\n\n\n<li>Gesti\u00f3n de contenidos m\u00e1s inteligente<\/li>\n<\/ul>\n\n\n\n<p>Es la diferencia entre una p\u00e1gina web plana y un CMS de nivel profesional construido sobre WordPress.<\/p>\n\n\n\n    <!-- Your HTML content starts here -->\n<section style=\"background-color: #f5f5f5; display:flex; justify-content: center; padding:4% 2%;\">\n\t<div class=\"container\" style=\"display:flex; padding: 1.4rem; border-radius: 10px; flex-wrap:wrap; box-shadow: 0px 0px 45px 0.1px #ddd; width: 70%; background: #fff;\">\n\t\t\t\t\t<div style=\"margin-right: 10px; width: 18%;\">\n\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2023\/11\/WordPress_Ultimate_CSV_-XML_Importer_Pro.webp\" alt=\"WP Ultimate CSV Importer Pro\" width=\"120px\">\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div style=\"width: 80%;\">\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<div class=\"\">\n\t\t\t\t\t\t\t\t<p style=\"margin-top: 0px; font-weight: 600;\">WP Ultimate CSV Importer Pro<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<p style=\"font-size: 16px; line-height: 1.8em;\">Get Ultimate CSV\/XML Importer to import data on WordPress faster, quicker and safer.<\/p>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div style=\"display: flex; justify-content: center; align-items:center; width:100%;\">\n\t\t\t\t\t\t<button style=\"border-radius: 3px; padding: 10px 20px;border: none; box-shadow: 0px 0px 8px #ccc; background-color: #E91F1F;\">\n\t\t\t\t\t\t\t\t<a href=\"https:\/\/dev.smackcoders.com\/wp-ultimate-csv-importer-pro.html?utm_source=website&amp;utm_medium=sm_cta&amp;utm_campaign=csv_importer_pro_cta_banner\" style=\"color: #fff !important\">\n\t\t\t\t\t\t\t\t\tGrab it Now <b>$299\/-<\/b>\n\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/button>\n\t\t\t\t\t<\/div>\n\t<\/div>\n<\/section>\n    <!-- Shortcode HTML content ends here -->\n\t\n\n\n\n<h2 class=\"wp-block-heading\" id=\"best-plugins-for-custom-post-types\">Mejores plugins para tipos de publicaciones personalizadas&nbsp;<\/h2>\n\n\n\n<p>Aunque WordPress te permite crear Tipos de Publicaciones Personalizados manualmente, a veces un plugin puede ahorrarte tiempo y dolores de cabeza, especialmente cuando gestionas m\u00faltiples CPTs, campos o relaciones.<\/p>\n\n\n\n<p>Aqu\u00ed tienes los plugins m\u00e1s fiables, probados por desarrolladores y amigables para SEO para potenciar tus sitios WordPress din\u00e1micos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-jet-engine\"><strong>1. <\/strong><a href=\"https:\/\/crocoblock.com\/plugins\/jetengine\/\" target=\"_blank\" rel=\"noopener\">Motor a reacci\u00f3n<\/a><\/h3>\n\n\n\n<p><strong>Lo mejor para:<\/strong> Usuarios de Elementor que quieren bloques de contenido din\u00e1micos y publicaciones de anuncios.<\/p>\n\n\n\n<p>JetEngine se integra con Elementor para mostrar CPTs de forma din\u00e1mica, perfecto para portafolios, puestos o sitios de anuncios.<\/p>\n\n\n\n<p>Est\u00e1 m\u00e1s orientado al dise\u00f1o, d\u00e1ndote el control creativo que los desarrolladores tienen con el c\u00f3digo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-meta-box\"><strong>2.<\/strong><a href=\"https:\/\/wordpress.org\/plugins\/meta-box\/\" target=\"_blank\" rel=\"noopener\"> Meta Box<\/a><\/h3>\n\n\n\n<p><strong>Lo mejor para:<\/strong> Desarrolladores que quieren m\u00e1s control y un rendimiento m\u00e1s r\u00e1pido.<\/p>\n\n\n\n<p>Meta Box es una alternativa ligera a ACF, con las mismas caracter\u00edsticas, pero con menos carga. Puedes crear campos personalizados, relaciones y p\u00e1ginas de configuraci\u00f3n, todo con c\u00f3digo o interfaz flexible.<\/p>\n\n\n\n<p><strong>Por qu\u00e9 les encanta a los desarrolladores:<\/strong> Puedes exportar tus grupos de campos como c\u00f3digo PHP e integrarlos directamente en tu tema o plugin.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"450\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/meta-box-plugin-banner-1024x450.webp\" alt=\"meta-box-plugin-banner\" class=\"wp-image-334781374\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/meta-box-plugin-banner-1024x450.webp 1024w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/meta-box-plugin-banner-300x132.webp 300w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/meta-box-plugin-banner-768x337.webp 768w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/meta-box-plugin-banner-360x158.webp 360w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/meta-box-plugin-banner-600x264.webp 600w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/meta-box-plugin-banner.webp 1518w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-advanced-custom-fields-acf\"><strong>3. <\/strong><a href=\"https:\/\/wordpress.org\/plugins\/advanced-custom-fields\/\" target=\"_blank\" rel=\"noopener\">Campos Personalizados Avanzados (ACF)<\/a><\/h3>\n\n\n\n<p><strong>Lo mejor para:<\/strong> A\u00f1adir campos personalizados, relaciones, repetidores y dise\u00f1os flexibles.<\/p>\n\n\n\n<p>ACF te da control total sobre la estructura de tu contenido. Desde cuadros de texto hasta subidas de im\u00e1genes y campos repetidores, ayuda a tus CPT a recopilar cualquier tipo de datos.<br>Tambi\u00e9n es compatible con Gutenberg, lo que significa que puedes usar campos directamente en los editores de bloques.<\/p>\n\n\n\n<p><strong>Ejemplo:<\/strong> A\u00f1ade los campos \u00abNombre del cliente\u00bb y \u00abURL del proyecto\u00bb a tu CPT de \u00abProyectos\u00bb en minutos, no hace falta PHP.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"440\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/advanced-custom-fields-plugin-banner-1024x440.webp\" alt=\"advanced-custom-fields-plugin-banner\" class=\"wp-image-334781362\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/advanced-custom-fields-plugin-banner-1024x440.webp 1024w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/advanced-custom-fields-plugin-banner-300x129.webp 300w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/advanced-custom-fields-plugin-banner-768x330.webp 768w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/advanced-custom-fields-plugin-banner-360x155.webp 360w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/advanced-custom-fields-plugin-banner-600x258.webp 600w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/advanced-custom-fields-plugin-banner.webp 1525w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4-pods-framework\"><strong>4.<\/strong><a href=\"https:\/\/pods.io\/\" target=\"_blank\" rel=\"noopener\"> Marco de Pods<\/a><\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"432\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/pods-custom-content-types-and-fields-plugin-banner-1024x432.webp\" alt=\"pods-custom-content-types-and-fields-plugin-banner\" class=\"wp-image-334781380\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/pods-custom-content-types-and-fields-plugin-banner-1024x432.webp 1024w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/pods-custom-content-types-and-fields-plugin-banner-300x126.webp 300w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/pods-custom-content-types-and-fields-plugin-banner-768x324.webp 768w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/pods-custom-content-types-and-fields-plugin-banner-360x152.webp 360w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/pods-custom-content-types-and-fields-plugin-banner-600x253.webp 600w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/pods-custom-content-types-and-fields-plugin-banner.webp 1516w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><strong>Lo mejor para:<\/strong> Construir sitios web din\u00e1micos completos con CPTs, taxonom\u00edas y relaciones, todo en un solo lugar.<\/p>\n\n\n\n<p>Pods es una potencia sin c\u00f3digo que te permite crear CPTs, a\u00f1adir campos e incluso relacionarlos, como conectar \u00abCursos\u00bb con \u00abInstructores\u00bb.<br>Es intuitivo para principiantes pero lo suficientemente potente para desarrolladores.<\/p>\n\n\n\n<p><strong>Extra:<\/strong> Pods soporta la API REST y plantillas personalizadas, ideales para WordPress sin interfaz o compilaciones complejas.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"862\" height=\"576\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/pods-create-course-custom-post-type-screen.webp\" alt=\"pods-create-course-custom-post-type-screen\" class=\"wp-image-334781377\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/pods-create-course-custom-post-type-screen.webp 862w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/pods-create-course-custom-post-type-screen-300x200.webp 300w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/pods-create-course-custom-post-type-screen-768x513.webp 768w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/pods-create-course-custom-post-type-screen-360x241.webp 360w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/pods-create-course-custom-post-type-screen-600x401.webp 600w\" sizes=\"(max-width: 862px) 100vw, 862px\" \/><\/figure>\n\n\n\n<p>Interfaz de Pods Admin que muestra la creaci\u00f3n de un nuevo tipo de publicaci\u00f3n personalizado llamado \u00abCursos\u00bb con sencillos pasos de configuraci\u00f3n sin c\u00f3digo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"5-toolset-types\"><strong>5.<\/strong><a href=\"https:\/\/toolset.com\/home\/types-manage-post-types-taxonomy-and-custom-fields\/\" target=\"_blank\" rel=\"noopener\"> Tipos de conjunto de herramientas<\/a><\/h3>\n\n\n\n<p><strong>Lo mejor para:<\/strong> Usuarios que desean un sistema todo en uno para crear, dise\u00f1ar y mostrar CPTs visualmente.<\/p>\n\n\n\n<p>Toolset Types te ayuda a crear CPTs, taxonom\u00edas y relaciones mientras dise\u00f1as plantillas de front-end usando una interfaz de arrastrar y soltar perfecta para usuarios que prefieren construir sin c\u00f3digo.<\/p>\n\n\n\n<p><strong>Caso de uso: <\/strong>Crea r\u00e1pidamente un directorio, un sitio inmobiliario o un sistema de aprendizaje en l\u00ednea sin tocar archivos PHP.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/toolset-plugin-homepage-banner-1024x447.webp\" alt=\"toolset-plugin-homepage-banner\" class=\"wp-image-334781386\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/toolset-plugin-homepage-banner-1024x447.webp 1024w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/toolset-plugin-homepage-banner-300x131.webp 300w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/toolset-plugin-homepage-banner-768x335.webp 768w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/toolset-plugin-homepage-banner-1536x671.webp 1536w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/toolset-plugin-homepage-banner-360x157.webp 360w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/toolset-plugin-homepage-banner-600x262.webp 600w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/toolset-plugin-homepage-banner.webp 1587w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"6-custom-post-type-ui-cpt-ui\"><strong>6.<\/strong><a href=\"https:\/\/wordpress.org\/plugins\/custom-post-type-ui\/\" target=\"_blank\" rel=\"noopener\"> Interfaz de Tipo de Poste Personalizada (CPT UI)<\/a><\/h3>\n\n\n\n<p><strong>Lo mejor para:<\/strong> Principiantes y propietarios de sitios que buscan una forma visual de crear tipos de publicaciones y taxonom\u00edas.<\/p>\n\n\n\n<p>Este plugin es como tu centro de control CPT. Puedes crear nuevos tipos de publicaciones, adjuntar taxonom\u00edas existentes y gestionar todo desde el panel de control, sin necesidad de programaci\u00f3n.<br>Comb\u00ednalo con <a href=\"https:\/\/wordpress.org\/plugins\/advanced-custom-fields\/\" target=\"_blank\" rel=\"noopener\"><strong>Campos Personalizados Avanzados (ACF)<\/strong> <\/a>para a\u00f1adir campos y plantillas personalizadas.<\/p>\n\n\n\n<p><strong>Consejo profesional:<\/strong> Usa CPT UI para registrar los tipos de publicaciones y ACF para dise\u00f1ar sus campos de datos, una combinaci\u00f3n perfecta para quienes no programan.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"430\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/custom-post-type-ui-plugin-banner-1024x430.webp\" alt=\"custom-post-type-ui-plugin-banner\" class=\"wp-image-334781371\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/custom-post-type-ui-plugin-banner-1024x430.webp 1024w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/custom-post-type-ui-plugin-banner-300x126.webp 300w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/custom-post-type-ui-plugin-banner-768x323.webp 768w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/custom-post-type-ui-plugin-banner-1536x645.webp 1536w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/custom-post-type-ui-plugin-banner-360x151.webp 360w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/custom-post-type-ui-plugin-banner-600x252.webp 600w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/custom-post-type-ui-plugin-banner.webp 1540w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"final-verdict\">Veredicto final<\/h3>\n\n\n\n<p>Si eres principiante, adelante <strong>CPT UI + ACF<\/strong>.<br>Si eres desarrollador, usa <strong>Meta Box<\/strong> o <strong>C\u00e1psulas<\/strong>.<br>Si eres dise\u00f1ador, usando Elementor <strong>Motor a reacci\u00f3n<\/strong> se sentir\u00eda natural.<\/p>\n\n\n\n<p>Cada plugin tiene el mismo objetivo: ayudarte a construir sitios WordPress estructurados, din\u00e1micos y escalables sin fricciones.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion-turn-word-press-into-a-fully-dynamic-cms\">Conclusi\u00f3n: Convertir WordPress en un CMS completamente din\u00e1mico<\/h2>\n\n\n\n<p>Cuando te das un paso atr\u00e1s y observas todo lo que hemos cubierto, una cosa queda clar\u00edsima: los Tipos de Publicaci\u00f3n Personalizados son lo que hace que WordPress sea realmente ilimitado.<\/p>\n\n\n\n<p>Son la columna vertebral de todos los sitios profesionales que hayas admirado, desde plataformas de e-learning hasta anuncios inmobiliarios y carteras de agencias. Sin ellos, WordPress seguir\u00eda siendo solo una herramienta para blogs.<\/p>\n\n\n\n<p>A estas alturas, ya has aprendido c\u00f3mo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Construye CPTs usando plugins como CPT UI y ACF (perfecto para principiantes).<\/li>\n\n\n\n<li>Crea CPTs manualmente o program\u00e1ticamente para tener control total por parte del desarrollador.<\/li>\n\n\n\n<li>Utiliza taxonom\u00edas, categor\u00edas y relaciones para estructurar tu contenido de forma inteligente.<\/li>\n\n\n\n<li>Elige los mejores plugins que se adapten a tu flujo de trabajo y nivel de experiencia.<\/li>\n<\/ul>\n\n\n\n<p>Cuando combinas todo esto, conviertes WordPress en una potencia din\u00e1mica de contenido, r\u00e1pida, organizada, optimizada para SEO y dise\u00f1ada para el crecimiento.<\/p>\n\n\n\n<p>Recuerda: empieza poco a poco. Quiz\u00e1 solo un CPT como \u00abProyectos\u00bb o \u00abCursos\u00bb. Una vez que veas lo limpio que est\u00e1 tu contenido, nunca volver\u00e1s a usar publicaciones normales para todo.<\/p>\n\n\n\n<p>As\u00ed que, tanto si eres un bloguero en solitario, propietario de un negocio o desarrollador web, esta es tu se\u00f1al: \u00abEmpieza a construir de forma m\u00e1s inteligente, no m\u00e1s dif\u00edcil\u00bb.<\/p>\n\n\n\n<p>Empieza a crear tu primer tipo de publicaci\u00f3n personalizado. Convierte tu sitio WordPress en un CMS din\u00e1mico y escalable hoy mismo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"394\" height=\"574\" src=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-dashboard-with-multiple-custom-post-types.webp\" alt=\"wordpress-dashboard-with-multiple-custom-post-types\" class=\"wp-image-334781398\" srcset=\"https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-dashboard-with-multiple-custom-post-types.webp 394w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-dashboard-with-multiple-custom-post-types-206x300.webp 206w, https:\/\/dev.smackcoders.com\/wp-content\/uploads\/2025\/12\/wordpress-dashboard-with-multiple-custom-post-types-351x512.webp 351w\" sizes=\"(max-width: 394px) 100vw, 394px\" \/><\/figure>\n\n\n\n<p>\u00abSitio WordPress est\u00e1tico\u00bb (solo publicaciones) vs. un \u00absitio CMS din\u00e1mico\u00bb (Posts + Proyectos + Eventos + Cursos).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fa-qs-everything-you-need-to-know-about-word-press-custom-post-types\">Preguntas frecuentes: Todo lo que necesitas saber sobre los tipos de publicaciones personalizadas en WordPress<\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1772775559923\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">1. <strong>\u00bfCu\u00e1l es la relaci\u00f3n entre los Tipos de Publicaciones Personalizadas y WordPress?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Los Tipos de Publicaciones Personalizados ampl\u00edan la estructura central de WordPress. Por defecto, tienes \u00abPublicaciones\u00bb y \u00abP\u00e1ginas\u00bb. Los CPTs te permiten definir nuevos tipos de contenido como Proyectos, Cursos o Testimonios que se comportan igual que publicaciones pero se mantienen organizados por separado. En t\u00e9rminos sencillos: Entradas = contenido del blog. CPTs = todo lo dem\u00e1s que tu sitio necesita.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1772775576663\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>2. \u00bfC\u00f3mo muestro mi contenido de Tipo de Publicaci\u00f3n Personalizado en el front-end?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Puedes mostrar el contenido CPT de varias maneras:<br \/>Utiliza Query Loop Block (temas de bloque) para listados autom\u00e1ticos.<br \/>Crea plantillas archive-{cpt}.php y single-{cpt}.php para control total.<br \/>O usa constructores de p\u00e1ginas como Elementor o Gutenberg con widgets din\u00e1micos.<br \/>Ejemplo: Crea archive-project.php para mostrar una cuadr\u00edcula de todos tus proyectos con im\u00e1genes destacadas y enlaces.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1772775595890\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>3. \u00bfC\u00f3mo a\u00f1ado categor\u00edas o etiquetas a mi Tipo de Publicaci\u00f3n Personalizada?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Puedes adjuntar taxonom\u00edas existentes o crear nuevas:<br \/>Para categor\u00edas\/etiquetas existentes, simplemente incluye esto en tus argumentos CPT:<br \/>&#8216;taxonom\u00edas&#8217; =&gt; arreglo(&#8216;categor\u00eda&#8217;, &#8216;post_tag&#8217;).<br \/><strong>Consejo extra:<\/strong> Crear taxonom\u00edas personalizadas como \u00abTipo de proyecto\u00bb o \u00abNivel de curso\u00bb da a tu sitio una estructura m\u00e1s limpia y mejores opciones de filtrado.<br \/>\u00a0<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1772775623027\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>4. \u00bfCu\u00e1l es la diferencia entre Tipos de Publicaciones Personalizadas y Campos Personalizados?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Los CPT definen qu\u00e9 tipo de contenido vas a a\u00f1adir (como Proyectos o Cursos), mientras que los Campos Personalizados definen qu\u00e9 detalles vas a almacenar (como \u00abNombre del Cliente\u00bb, \u00abPresupuesto del Proyecto\u00bb o \u00abDuraci\u00f3n\u00bb). Trabajan de la mano para estructurar y reutilizar tu contenido.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1772775641247\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>5. \u00bfSon los tipos de publicaciones personalizadas compatibles con el SEO?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Sin duda, de hecho, ayudan a mejorar el SEO cuando est\u00e1n bien configurados. Al estructurar tu contenido y URLs (como \/projects\/ o \/courses\/), das a los motores de b\u00fasqueda una comprensi\u00f3n m\u00e1s clara de la arquitectura de tu sitio.<br \/>Solo aseg\u00farate de:<br \/>Activa \u00abArchive de tienes\u00bb al registrar tu CPT.<br \/>Usa plugins de SEO como Rank Math o Yoast para optimizar tus CPTs.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1772775664685\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>6. \u00bfPuedo exportar o migrar mis CPTs a otro sitio?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>\u00a1S\u00ed! La herramienta <a href=\"https:\/\/dev.smackcoders.com\/wp-ultimate-csv-importer-pro.html?srsltid=AfmBOooHtFRAtll6vOC7i0cWh_izW1K50Ud17aDlRFYp9EHj09oAgyUq\"><strong>WP Ultimate CSV Importer Pro<\/strong> <\/a>puede ayudarte a migrar datos, campos y taxonom\u00edas CPT de forma segura. Es perfecto para agencias o desarrolladores que gestionan m\u00faltiples sitios de clientes.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\u00bfQu\u00e9 hace que un sitio WordPress sea din\u00e1mico? Si alguna vez has sentido que tu sitio de WordPress parece demasiado \u00abest\u00e1tico\u00bb, no est\u00e1s solo. La mayor\u00eda de los sitios dependen de Posts y P\u00e1ginas, que son adecuados para blogs o sitios web sencillos, pero limitantes cuando necesitas algo m\u00e1s estructurado. Ah\u00ed es donde entran los [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":334781339,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1,3461],"tags":[],"class_list":["post-334784010","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","category-wordpress-guide"],"acf":[],"_links":{"self":[{"href":"https:\/\/dev.smackcoders.com\/es\/wp-json\/wp\/v2\/posts\/334784010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dev.smackcoders.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dev.smackcoders.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dev.smackcoders.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dev.smackcoders.com\/es\/wp-json\/wp\/v2\/comments?post=334784010"}],"version-history":[{"count":2,"href":"https:\/\/dev.smackcoders.com\/es\/wp-json\/wp\/v2\/posts\/334784010\/revisions"}],"predecessor-version":[{"id":334784021,"href":"https:\/\/dev.smackcoders.com\/es\/wp-json\/wp\/v2\/posts\/334784010\/revisions\/334784021"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dev.smackcoders.com\/es\/wp-json\/wp\/v2\/media\/334781339"}],"wp:attachment":[{"href":"https:\/\/dev.smackcoders.com\/es\/wp-json\/wp\/v2\/media?parent=334784010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dev.smackcoders.com\/es\/wp-json\/wp\/v2\/categories?post=334784010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dev.smackcoders.com\/es\/wp-json\/wp\/v2\/tags?post=334784010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}