Índice de contenidos
Crear Custom Post Types o entradas personalizadas
En el artículo de hoy aprenderemos a crear entradas personalizadas en WordPress. Las entradas personalizadas nos permiten tratar la información de nuestro sitio de forma más estructurada y coherente.
PROBLEMA: WordPress viene con los siguientes tipos de entradas definidas:
- Entradas – Post (Post Type: ‘post’)
- Páginas – Page (Post Type: ‘page’)
- Adjuntos – Attachment (Post Type: ‘attachment’)
- Revisiones – Revision (Post Type: ‘revision’)
- Menú navegación – Navigation menu (Post Type: ‘nav_menu_item’)
en muchos proyectos estos tipos de entradas no cubren las necesidades del mismo.
¿Por qué necesitamos crear Entradas Personalizadas o Custom Post Types?
Vamos a suponer que necesitamos crear un sitio que habla sobre libros. En este caso es probable que necesites almacenar datos concretos que identificas a cada libro con el título, autor, editorial… La estructura de las entradas de WordPress tal y como vienen definidas no te permiten esto. Además la palabra post o entradas tampoco definen muy bien un tipo de artículo concreto.
El problema todavía es mayor si además de la información de libros queremos añadir información a nuestro sitio sobre «autores». Los autores los identificamos con su nombre, fecha de nacimiento, biografía y otras publicaciones. Ahora mismo tenemos dos tipos de contenidos muy diferentes en nuestra web.
¿Qué decisión tomamos?
- Creamos dos categorías en post una para libros y otra para autores y los editamos todos como post creando campos diferentes para cada tipo.
- o creamos dos tipos de entradas personalizadas una para libros y otra para autores y les asignamos sus atributos correspondientes
SOLUCIÓN: a pesar de que ambas soluciones son correctas, en este caso es más adecuado aplicar la segunda opción. Vamos a añadir a nuestro archivo functions.php un pequeño código para crear entradas personalizadas en WordPress. En este artículo crearemos un nuevo tipo de entrada personalizada (CPT) para «libro».
Entradas Personalizadas en WordPress: en la imagen de la izquierda puedes observar un administrador WordPress con dos tipos de entradas personalizadas: «Servicios» y «Trabajos Realizados».
¿Qué son los custom post types o entradas personalizadas?
Los custom post types o tipos de entrada personalizados son elementos para almacenar contenido diferente al que viene por defecto en WordPress. Este contenido tiene la misma funcionalidad que las entradas (post) o las páginas de WP pero se crea según las necesidades del proyecto.
Los CPT tendrán un menú en el panel de administración de WordPress igual que el de páginas o post…
Podemos crear tantos tipos de entradas personalizadas como necesidades tenga el sitio web; entradas personalizadas para almacenar datos de películas, cds, equipos de fútbol… y asignarles a cada una campos o atributos personalizados.
Crear entradas personalizadas en 3 pasos
Hoy vamos a ver como crear estas entradas personalizadas y en otro post os explicaré como crear campos personalizados. Existen plugins que instalados en tu WordPress te ayudarán a crear entradas personalizadas, en este artículo no vamos a emplear ningún plugin, lo haremos con programación, ya que es un código muy sencillo.
PASO 1 – localizar el archivo dónde escribiremos el código
Primero necesitamos abrir el archivo functions.php de tu tema hijo WordPress. Lo puedes localizar en la siguiente ruta: /wp-content/themes/tutemahijo/functions.php
Si no tienes creado un tema hijo recuerda que puedes perder el código de esta función al actualizar el tema, creo que es un buen momento para que decidas trabajar con temas hijo.
PASO 2 – copiar el código dentro del archivo
Copia el siguiente código: este código añade un nuevo tipo de entrada personalizada llamada libro en WordPress, si quieres añadir categorías y etiquetas a esta entrada tipo libro puedes dejar un comentario y te envío el código completo.
Puedes modificar libro por el nombre que más identifique a tu entrada personalizada teniendo en cuenta las siguientes limitaciones:
- No puede tener más de 20 caracteres, ni letras mayúsculas o espacios.
- No puedes emplear nombres reservados en WordPress (post, pages…)
/* cargamos con el hook 'init' el registro del nuevo tipo */ add_action('init', 'cpt_libros', 1); /*Función con los argumentos y etiquetas de nuestro tipo*/ function cpt_libros() { $labels = array( 'name' => _x('Libros', 'post type general name'), 'singular_name' => _x('Libro', 'post type singular name'), 'add_new' => _x('Añadir Nuevo Libro', 'Libro'), 'add_new_item' => __('Añdir Nuevo Libro'), 'edit_item' => __('Editar Libro'), 'new_item' => __('Nuevo Libro'), 'view_item' => __('Ver Libro'), 'search_items' => __('Buscar Libro'), 'not_found' => __('No se han encontrado Libros'), 'not_found_in_trash' => __('No se han encontrado Libros en la papelera') ); $args = array( 'labels' => $labels, 'public' => true, 'hierarchical' => false, 'menu_position' => 2, 'has_archive' => true, 'query_var' => true, 'supports' => array('title','editor','thumbnail'), 'rewrite' => array('slug' => 'libro'), ); register_post_type( 'libro', $args ); }
Cómo verás es un código muy sencillo pero suficiente para crear tu nueva entrada personalizada, este código admite muchos más argumentos, por lo tanto se puede ampliar para añadir categorías, etiquetas, para que soporte autor, comentarios…
Explicación Código Entradas Personalizadas en WordPress
Si observas la function, verás que se divide en tres secciones;
- Etiquetas (labels): sirven para crear en el administrador de WordPress el nuevo menú libro y los submenús de añadir nueva entrada, papelera…
- Array de argumentos ($args): lo primero que hacemos en este array es pasarle las etiquetas labels que hemos creado y añadimos características que soportará nuestro nuevo tipo de post. Este array dispones de muchos parámetros, puedes conocer más detalles del mismo en lo siguientes artículos de este blog:
- Artículo que analiza el Array supports en Custom Post Types: Dentro del array de argumentos ($args) hacemos referencia a «supports», es un alias que llama a la función de WordPress add_post_type_support() y que añade las características que soportará el post, lo que indicamos dentro del array supports es lo que veremos en la ventana de edición del mismo dentro del administrador de WordPress.
- Artículo sobre todos los parámetros soportados por el array de argumentos al crear nuevas entradas personalizadas.
- Registro del post_type (register_post_type).
PASO 3 – Guarda los cambios
Para finalizar pulsa sobre «Guardar» en el archivo functions.php y si es necesario subes el archivo al servidor*.
*Normalmente yo trabajo con un editor de código que me permite editar directamente las modificaciones en el servidor y este paso en algunas ocasiones no es necesario realizarlo.
Para acceder a la edición de las Entradas Personalizadas en WordPress entra de nuevo en tu administrador. Se ha creado un nuevo menú con cada una de las entradas personalizadas.
Siguiendo el mismo método puedes crear tantas entradas personalizadas como necesites.
Si necesitas añadir atributos o campos personalizados a tus entradas puedes leer los siguientes artículos de este blog:
Plugin Custom Fields WordPress
Código Custom Fields WordPress
Polylang: si tu web está implementada en varios idiomas y utilizas Polylang necesitarás adaptar las nuevas entradas para que puedan ser traducidas, aquí te dejo el código necesario para utilizar Polylang con Custom Post Types.
muchas gracias, se me habia encallado un trabajillo que debia hacer, y gracias a tus indicaciones logre solucionarlo, muchas gracias (nunca un error 404 me habia dado pánico), jajajjajaj
Gracias Ricardo, me alegra saber que he podido ayudarte. Feliz fin de semana
Hola Nerea muchas gracias por la información que compartes creado en una web de la que soy colaborador entradas personalizadas con sus campos personalizados pero no consigo visualizarlo siempre que llamo a la entrada me da un error 404.
Ese te ocurre donde podría meter la pata?
Hola Carlos,
sin ver el código y la página es imposible conocer el error.
Saludos
Después de buscar en la web he encontrado tu magnífico blog y casi lo tengo de libro de cabecera. Es caso es que estoy manteniendo una web con wordpress y necesito crear una entrada personalizada para poder escribir y presentar experiencias educativas con distintos campos. Ya he visto y he probado el plugin que recomiendas para los campos y ahora necesitaría completar el código que explicas con el ejemplo de libro para que admitiese categorías y etiquetas para clasificarlas y también autor/a y comentarios. Soy docente ya jubilado y no tengo ni idea de programación en php y aunque nunca es tarde para aprender, mi dedicación actual no me permite dedicarle el tiempo necesario para resolver el problema que tengo en estos momentos. Gracias, Nerea, por tu oferta de enviar el código de forma generosa y desinteresada. Saludos
Buenas tardes Juan José, para poder admitir comentarios, autor… sustituye la línea 25 de código por la siguiente:
‘supports’ => array( ‘title’, ‘editor’, ‘author’, ‘thumbnail’, ‘excerpt’, ‘comments’ ),
para trabajar con categorías y etiquetas lo podemos hacer de dos formas, compartiendo etiquetas y categorías de los post o una segunda opción es que las etiquetas y categorías no sirvan para post.
En el primer caso el código es:
‘taxonomies’ => array( ‘category’, ‘post_tag’ ),
lo añades debajo de la línea supports.
Vamos haciendo estos cambios y me comentas.
Un saludo y ¡felices fiestas!
Muchas gracias, Nerea. Lo probaré después de estas fiestas.
Muy bien, si tienes algún problema me avisas.
Que disfrutes de las fiestas!
¡Hola, Nerea!:
En primer lugar que tengas un feliz año 2018. He probado el código que me enviaste y funciona muy bien, también he probado algunos plugins para crear campos personalizados y también lo he conseguido. Lo que necesito ahora y estoy investigando es como mostrar los registros que voy haciendo, en mi caso con las experiencias. Una vez guardadas no se ven en la web, cosa que creo que es razonable hasta que programe como hacerlas visibles. No tendrás algún tema sobre esto en tu web para estudiarmelo? Utilizo el tema Twenty Ten de wordpress y lo que quiero es que aparezcan todas mis experiencias con sus campos personalizados en los artículos que voy publicando así como en la portada y en las distintas categorías donde las he incluido. Muchas gracias por tu ayuda.
Hola de nuevo, me alegran mucho tus avances, creo que tienes madera para esto.
En el blog tienes dos artículos para conseguir trabajar con campos personalizados en los siguientes enlaces:
https://laprogramaciondehoy.com/campos-personalizados-en-wordpress-custom-fields/
https://laprogramaciondehoy.com/plugin-campos-personalizados-wordpress-custom-fields/
Si tienes cualquier problema con el código o alguna duda aquí me encontrarás.
Que tengas un buen día!