• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar a la barra lateral principal

DecodeCMS

Tu WordPress a otro Nivel ...

  • Acerca de
  • Contacto
  • Inicio
  • Tutoriales
    • Themes
    • Plugins
    • Core
    • Recursos
  • Cursos
  • Acceder
    • Mis cursos
    • Mi Cuenta
    • Acceder
Inicio / Tutoriales / Core / Usando Custom Post Types en WordPress

Usando Custom Post Types en WordPress

Custom Post Types en WordPress

[ 19 mayo 2017 ] [ Actualizado: 29 noviembre 2017 ]
[ Autor: Jhon Marreros Guzmán ][ Core - Intermedio] [ ]

funcionalidad optimización

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

WordPress, a primera vista, para mostrar contenido tiene entradas y páginas. Y si quieres organizar tu información en otros apartados adicionales, es allí en donde puedes usar la funcionalidad de Custom Post Types o Tipo de Entradas Personalizadas.

 

1- Generalidades

De manera resumida, usar Custom Post Types te permite crear tu propio tipo de entradas, tal como se ve en la imagen adjunta, verás que se ha creado una sección de recetas, adicional a las que vienen por defecto.

Recetas Custom Post Type

 

La información que ingreses en recetas, se almacenará igualmente en la base de datos, en la tabla wp_posts, y se diferenciará con un campo llamado post_type, tal como se ve en la siguiente imagen.

Tabla wp_posts con campo post_type

 

Al revisar los registros de esta tabla no sólo encontrarás registros con el post_type : entrada, página y recetas (en el caso en que hayamos creado contenido para receta) sino que hay otros tipos por defecto.

Tipos de Custom Post Types por defecto:

  • Post (post) : Contenido de las entradas.
  • Page (page) : Contenido de las páginas
  • Attachment (attachment) : Contenido de las imágenes subidas.
  • Revision (revision): Borrador, auto guardado cuando creamos contenido.
  • Navigation Menu (nav_menu_item): Almacena información de items de menú.
  • Custom CSS (custom_css): Contenido CSS en la personalización de un theme.
  • Changesets (customize_changeset): Contenido de auto guardado pero para los cambios en la personalización de un theme.

 

2- ¿Cuando usar Cutom Post Types?

De acuerdo al ejemplo anterior, pude haber creado una categoría llamada Recetas y el contenido de las recetas como entradas; sin embargo algunas de las razones por las que se utilizan Custom Post Types son:

  • Organizar contenido distinto e independiente.
  • Configurar distintas opciones en la pantalla de creación/edición de contenido.
  • Estructura de enlaces independiente, beneficioso para SEO.
  • Integración con Taxonomías adicionales.

 

3- Creación de Custom Post Types

Para la creación de CPT puedes usar un plugin como Custom Post Types UI, sin embargo en este artículo vamos a ver cómo generar nuestro código de CPT con una herramienta online en GenerateWP.

Pantalla Descripcion


General Se define el nombre de la función, si la función se puede sobreescribir y el text domain para traducciones en un sitio multi idioma


Post Type Se define el nombre del post type y si irá asociado a determinadas taxonomías

Labels Se define los nombres de las distintas etiquetas que aparecerán en las pantallas de configuración y menús

Options Se define el soporte de determinas funcionalidades

Visibility En la mayoría de los caso dejaremos por defecto Public y Show UI, en este tab también podemos agregar un ícono

query Son opciones para posteriormente hacer nuestro loop personalizado, usualmente dejaremos los valores por defecto

Permalinks Si nuestro nombre de CPT es poco adecuado para la url, es aqui en donde podemos cambiarlo

Capabilities Usualmente dejaremos esto por defecto, con los permisos similares que tienen las entradas

Rest API Configuración de API Rest para nuestro CPT, podemos dejar las opciones por defecto

 

Al final obtendremos el siguiente código Custom Post Type para Recetas en GenerateWP

 

4- ¿En donde inserto este código?

Usualmente un CPT forma parte de un plugin, sin embargo si quieres esta funcionalidad de manera independiente puedes evaluar usar el functions.php de tu theme actual, aunque mejor es usar un plugin para insertar snippets, te recomiendo revisar el artículo: Agregar código sin usar functions.php

 

5- Mostrando el Custom Post Type en tu sitio

Para mostrar el Custom Post Type de Recetas en el Front-end de tu sitio web, será necesario hacer algunas modificaciones a los archivos de tu theme.
Sin embargo una opción rápida es usar los archivos que hay actualmente como parte del theme y agregar el Custom Post Type a la consulta, es decir usar el siguiente código:


add_action( 'pre_get_posts', 'add_my_post_types_to_query' );

function add_my_post_types_to_query( $query ) {
	if ( (is_single() || is_home() || is_category() ) && $query->is_main_query() )
		$query->set( 'post_type', array( 'post', 'recetas_post_type' ) );

	return $query;
}

 

Puedes insertar este código en el archivo functions.php de tu theme, o usar un plugin de Snippets

En el código anterior:

  • Se ha usado el hook pre_get_posts.
  • El hook hace referencia a la función add_my_post_types_to_query
  • Dentro de la función comprobamos main_query, es decir la consulta principal.
  • También comprobamos que se encuentre en una entrada individual, en el inicio o en una categoría.
  • Establecemos $query->set, pasando como parte de los argumentos el Custom Post Type Recetas
  • Lo que hace $query->set es agregar a la consulta los registros de los Post Types indicados

 

¿Aún con dudas?, en el siguiente video se explican cada uno de los puntos tratados anteriormente.

 

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

Artículos Relacionados

  • Cómo eliminar todos los productos de WooCommerceCómo eliminar todos los productos de WooCommerce
  • Agrupar los resultados de búsqueda en WordPressAgrupar los resultados de búsqueda en WordPress
  • tipos de complementos de WordPress5 tipos de complementos de WordPress
  • Sincronizar WooCommerce y Google SheetsSincronizar WooCommerce y Google Sheets
Valora este artículo : 1 barra2 barras3 barras4 barras5 barras (3 votos, promedio: 3,67 de 5)
Cargando...

Interacciones con los lectores

Comentarios

  1. Imanol

    28 junio, 2017

    Hola Jhon:
    Muy buenos tus tutoriales, me sirven de gran ayuda.
    Estoy haciendo un sitio web para la coral de mi pueblo (Zegama-Gipuzkoa-España) y he añadido como CPT “Partituras”.
    He añadido todas las entradas de mi CPT “Partituras” a una Página, con lo que están todas las partituras seguidas una detrás de otra; el problema es que no puedo paginar esta Página y no se porqué, añado diferentes paginaciones y siempre me da el mismo error al paginar:

    ¡Vaya! Esa página no se puede encontrar.
    Parece que no se encontró nada en este lugar. ¿Tal vez pueda intentar buscar?

    Quizás puedas echarme una mano, te estaría muy agradecido.
    Saludos
    Imanol

    • Jhon Marreros Guzmán

      30 junio, 2017

      Hola, lo que te puedo sugerir es que evalúes hacerlo con la funcionalidad de Jerarquía de Themes, en tu caso por ejemplo tener un archivo similar a: archive-partituras.php, sin embargo tendrías que programar en este archivo el bucle y la paginación, revisa: https://decodecms.com/jerarquia-de-archivos-de-plantilla-en-wordpress/

  2. JoAn Guevara

    8 julio, 2017

    Hola qué tal amigo, muy interesante tu blog. Con respecto al tema de la publicación yo recomendaría el juego de plugins de toolset WP-TYPES, muy completo y una maravilla para expandir las funcionalidades de manejo de contenido avanzado.

  3. Brandy

    30 octubre, 2017

    Hola,

    Creé un Custom Post Type para la sección de servicios de mi web. El detalle que no logro corregir es que tiene la apariencia de una entrada del blog, y no quiero eso. Quiero que los CPT tengan la apariencia de las páginas; full width y sin barra lateral.

    ¿Cómo logro modificar eso?

    Por si sirve de algo… En las páginas está la opción para habilitar o deshabilitar el FULL WIDTH. En los CPT, no.

    Si tienes otra entrada que hable sobre estos temas de CPT, pero más avanzados, te lo agradecería. Pienso crear otras secciones de mi web sin valerme de theme o plugins; como el portafolio.

  4. JAIME

    16 diciembre, 2017

    Hola Jhon, muy buen tutorial, pude crear mi CPT personalizado gracias a tus pasos, solo quiero resolver un par de dudas, la primera esta relacionada a que tengo instalado el pluging de Jetpack, para mostrar el contenido relacionado de los posts, pero este solo se muestra en los posts por defecto de WordPress, no en los CPT adicionales que creemos para realizar posts.

    Lo mismo sucede con el pluging YoastSeo, no esta activo para los posts que creemos en los CPT adicionales.

    Te agradezco si tienes la solución para activar estos plugins en los CPT que creemos.

    Feliz día.

    • Jhon Marreros Guzmán

      19 diciembre, 2017

      Hola, esto depende de los plugins que usas, algunas de los plugins son gratuitos hasta cierto punto, por ejemplo leyendo entradas y páginas, pero si quieres que reconozcan otros CPT tienen funcionalidad adicional de pago. En el caso de los posts relacionados podrías evaluar: https://decodecms.com/posts-relacionados-sin-plugins-en-wordpress/ , tendrías que hacer algunas variaciones a la consulta. En el caso de SEO Yoast, tienes que activar public para que lo reconozca, revisa: https://kb.yoast.com/kb/does-yoast-seo-work-with-custom-post-types/

  5. Vale

    9 junio, 2018

    Hola John
    ¿Necesito un hosting especial para publicar miles de tipos de publicaciones con Custom Post Types?
    Estoy planeando crear un catálogo de productos (no se requieren opciones de compra,no woocommerce)
    Tengo como 200,000 Productos. Estoy tratando de encontrar una solución en usar tablas HTML , pero las tablas son más para páginas estáticas o usar publicaciones personalizadas (CPT) que son dinámicos y con mejores opciones para organizar el contenido
    Agradeceré Cualquier consejo sobre esto.

    • Jhon Marreros Guzmán

      9 junio, 2018

      Hola, la mayoría de hosting de pago podrían soportar la cantidad de datos que comentas como CPT en tu base de datos, sin embargo igual puedes consultar al propio hosting. De manera general te recomendaría igual Woocommerce, que te crea CPT de productos y adicionales que podrían servirte en el futuro, puedes usar Woocommerce en modo catálogo.

  6. Victor

    16 agosto, 2018

    Hola Jhon. Gracias por tus tutos.

    Necesito crear en WP dos tipos de usuarios en los que recoger datos tipo, nombre, descripción, url, redes sociales y galeria de fotos. La diferencia entre ambos es la cantidad de fotos, rrss y tamaño de descripción. La idea es poder mostrar esos datos al pinchar en un mapa donde sale un icono de cada usuario. ¿Sería posible hacerlo mediante CPT? ¿Alguna base de cómo crearlo y acceder a esos datos para mostrarlos en una ventana?

    Gracias.

    • Jhon Marreros Guzmán

      16 agosto, 2018

      Hola, entiendo que quieres que los usuarios se registren con campos adicionales, no creo que sea un CPT la solución, más parece ser que requieres algún plugin de formularios, por ejemplo: https://www.gravityforms.com/ , además posiblemente tengas que programar algo para mostrar estos datos en un mapa.

  7. Michel

    30 julio, 2019

    Hola, una pregunta, despuès de creado un CPT como le indico a wordpress que muestras esas entradas personalizadas en una determinada pàgina?. Gracias

    • Jhon Marreros Guzmán

      3 agosto, 2019

      Hola

      Una opción sería que crees un archivo archivo-xxx, en donde xxx es el slug de tu CPT, revisa la gráfica y el artículo en: https://decodecms.com/jerarquia-de-archivos-de-plantilla-en-wordpress/

      Saludos.

  8. Alexander

    15 enero, 2020

    Hola tengo un error al ejecutar el código que muestra el CPT en el sitio, el error me da al tener 2 CPT en uno se ejecuta correctamente pero el otro me manda al 404

    • Jhon Marreros Guzmán

      17 enero, 2020

      Es posible que tengas que refrescar las urls amigables, desde Ajustes > Enlaces Permanentes, prueba grabar nuevamente.

  9. Alexander

    8 febrero, 2020

    Hola, pues ya probe lo de enlaces permanentes y nada, me percate que es en el codigo que muestra el CTP en el sitio, según en la posición que muestre se mostrara uno o el otro, ya verifique las variables y todo esta bien. Pero me sigue enviando a 404

    • Jhon Marreros Guzmán

      10 febrero, 2020

      Hola, prueba deshabilitar temporalmente urls amigables y verifica si asi se muestra. Saludos.

  10. julia

    4 junio, 2020

    Hola jhon,
    necesito que esta entrada sea diferente hice otro (single.php) ej: (single-tv.php) pero no se como hacer que se muestre en este codigo:
    add_action( ‘pre_get_posts’, ‘add_my_post_types_to_query’ );

    function add_my_post_types_to_query( $query ) {
    if ( (is_single() || is_home() || is_category() ) && $query->is_main_query() )
    $query->set( ‘post_type’, array( ‘post’, ‘recetas_post_type’ ) );

    return $query;
    }

    me prodrías ayudar muchas gracias.

    • Jhon Marreros Guzmán

      4 junio, 2020

      Hola entiendo que “tv” es el custom post type, el código que envías se basa en hooks por lo que podrías ponerlo en el functions.php directamente, es decir no necesitas crear un archivo para esto, sólo validarías en el if que corresponda a ese custom post type.

  11. Eduardo Gala

    20 junio, 2020

    Hola, gracias por tu post, soy nuevo en WP, y estaba tratando de hacer algo para dar acceso a los post solo a usuarios que pertenecen a un grupo en particular, encontré un plugin llamado Profilegrid pero es muy engorroso su uso para muchos usuario(incluye una procedimiento manual por usuario), hasta que encontré tu post, es por ello que te pido si puedes darme algunas pautas para empezar.

    • Jhon Marreros Guzmán

      21 junio, 2020

      Hola, no tiene que ver con Custom Post Types. Para lo que comentas podrías probar un plugin de membresía, por ejemplo: https://es.wordpress.org/plugins/restrict-user-access/

  12. ruben

    21 julio, 2020

    Buenas, ¿tienes algun tutorial para hacer algo similar pero mostrando el formulario a los usuarios? yo he creado una sección de post nueva con custom posts type, pero me gustaría mostrar ese formulario en una pagina especifica, también le he creado campos personalizados con ACF, como me llevaria todo ese formulario creado a una pagina para mostrarlo para que los usuarios puedan rellenar ese formulario? un saludo y gracias.

    • Jhon Marreros Guzmán

      22 julio, 2020

      Hola
      No me queda claro a qué formulario te refieres, supongo que quieres ingresar datos a tu CPT desde el front-end con un formulario. Puedes revisar: https://wordpress.org/support/topic/acf-cpt-form-widget/

  13. Ricardo

    13 agosto, 2020

    cómo puedo mostrar lo campo de mi cpt en forma de tabla sin utilizar plugin porque todos lo que lo hacen son de pago, gracias.

    • Jhon Marreros Guzmán

      15 agosto, 2020

      Hola, posiblemente tengas que usar un archivo para mostrar las entradas de tu CPT a nivel de tu theme, revisa especialmente archive-$posttype, en el siguiente enlace: https://decodecms.com/jerarquia-de-archivos-de-plantilla-en-wordpress/ , debes basarte en un archivo que ya exista y luego hacer las modificaciones en tabla.

  14. Mariana Ocana

    11 febrero, 2021

    Hola Jhon,
    Muchas gracias como siempre, es excelente la explicación, desde generar el codigo, usar el snipet, y luego visibilizar en el Theme.
    El error que encontré fue en esta línea y que es la que te preguntan: $query->set( ‘post_type’, array( ‘post’, ‘recetas_post_type’ ) );
    hay que quitar el “_post_type” donde dice recetas para que visualice, como indica, ‘post”, ‘recetas’ <—o el nombre que le den su CPT. y así ya se visualiza en el Theme y menú, y su propia entrada.

    • Jhon Marreros Guzmán

      13 febrero, 2021

      Hola, en mi ejemplo lo he registrado con ese id es por eso que lo uso así en el código: https://generatewp.com/snippet/nkklpyl/

  15. Betzy

    6 junio, 2021

    Hola Jhon!
    Gracias por tus post, me han aclarado muchas cosas. He creado un CPT de proyectos, quisiera saber cómo agregarle los enlaces de navegación de anterior y próximo.

    • Jhon Marreros Guzmán

      6 junio, 2021

      Hola, posiblemente tengas que agregar un archivo para el CPT para listar el contenido ( revisa: https://decodecms.com/jerarquia-de-archivos-de-plantilla-en-wordpress/ ), y luego usar las funciones previous_post_link() y next_post_link()

  16. julio cesar Maldonado

    4 octubre, 2021

    Hola Jhon,
    Esta muy interesante tus videos, quisiera preguntarte, quiero hacer un sistema de egresados, en los cuales inicien sesion y vean su información como sus diplomados realizados, es posible que esto me funcione, o que me recomiendas?

    • Jhon Marreros Guzmán

      6 octubre, 2021

      Hola, podrías evaluar usar un plugin de restricción de contenido, podrías restringir el contenido por usuario o rol de usuario.

  17. Daniela Arias

    29 noviembre, 2021

    Hola John, es posible usar la base de datos de un CPT en un subdominio? dominio y subdominio están en el mismo CPanel. Se le puede decir al subdominio que tabla agarrar?

    • Jhon Marreros Guzmán

      6 diciembre, 2021

      Hola, no lo tengo del todo claro que quieres lograr, pero si, puedes leer otras Bases de Datos, independiente del dominio o subdominio en el que estes.

Para escribir código envolver con: <pre class="language-xxx"><code> </code></pre> ,reemplaza las xxx (php, css, html)

*

* Gravatar habilitado

Barra lateral principal

Presentación

Curso Decodifica WordPress

Únete a DecodeCMS

Recibirás como regalo:

Guia práctica con video:
¿Quieres agregar código a WordPress? Revisa las diferentes opciones que tienes.Ver más

Jooble
Alojamiento Wordpress

Niveles

Básico Intermedio Avanzado

Etiquetas

accesibilidad css dashboard editor error funcionalidad herramientas imagen js librería mejoras optimización seguridad social woocommerce

Populares

Atributos como parte de la descripción del producto en WooCommerce

Cambiar desplegable por botones en las variaciones de productos de WooCommerce

Leer datos desde otra base de datos en WordPress

Mostrar mensajes en la administración de WordPress y en Gutenberg

© logo decode pie
Política de Privacidad | Política de devoluciones
Copyrigth 2023 Todos los derechos reservados