Cómo crear un Custom Post Type en WordPress
WordPress tiene varios tipos de entradas para ayudarte a organizar el contenido de tu sitio web. Con ellos puedes crear fácilmente un blog cronológico o mostrar páginas estáticas.
Sin embargo, los tipos de entrada incorporados pueden no ser suficientes para sitios web grandes con contenido diverso. En ese caso, debes crear tu propio tipo de entrada.
Este artículo te explicará cómo crear un tipo de entrada personalizado o custom post type en WordPress. También aprenderás a personalizarlo para ampliar su funcionalidad.
Descarga la hoja de trucos de WordPress definitiva
Tabla de Contenidos
¿Qué son los Custom Post Types de WordPress?
El tipo de entrada personalizado de WordPress es una categoría de contenido adicional que los usuarios crean para organizar el contenido de su sitio web. Es útil si tu sitio web de WordPress tiene contenido variado que no pertenece a los tipos de entrada predeterminados de WordPress.
Tipos de entradas de WordPress
Aunque puedes asignar categorías para organizar todo tipo de contenido, tus publicaciones aparecerán en una lista cuando estén agrupadas en el mismo tipo de publicación. Esto dificulta el seguimiento de tus publicaciones.
Por defecto, WordPress tiene siete tipos de entradas:
- Entradas: categoría para entradas regulares. El contenido típico de este tipo incluye una entrada de blog.
- Páginas: muestra contenido estático que no está ordenado por fecha.
- Archivos adjuntos: todos los medios del sitio web, incluidas imágenes, vídeos o archivos PDF.
- Revisiones: versiones guardadas de todos los tipos de entrada.
- Menús de navegación: lista de enlaces que los visitantes de tu sitio web pueden utilizar para encontrar información específica.
- CSS personalizado: tipo que puedes modificar para personalizar tu tema de WordPress.
- Conjuntos de cambios: el seguimiento de los cambios realizados en el personalizador.
Los tipos de entrada personalizados de WordPress te permiten elegir una sección concreta para tu contenido. Puedes agrupar rápidamente el contenido sin elegir categorías y realizar fácilmente un seguimiento de las entradas en diferentes secciones.
Los custom post types de WordPress también ofrecen varias opciones de personalización. Esto te permite ampliar su funcionalidad más allá de las entradas predeterminadas.
Por ejemplo, puedes mover el menú de tipo de entrada personalizada, cambiar el aspecto de la pantalla de edición y activar funciones como las imágenes destacadas o los excerpts.
Elementos de un custom post type en WordPress
Antes de crear tipos de entrada personalizados, debes entender los términos array y element. Estas son partes esenciales del código de tu tipo de entrada personalizado.
Un array es una estructura de datos que almacena pares de clave y valor conocidos como elements. En este caso, reserva las propiedades del tipo de entrada personalizado.
Para crear un tipo de entrada personalizado de WordPress, hay tres matrices que contienen diferentes elementos: $args, $labels y $supports. La matriz asociativa $args es la abreviatura de argumentos, que incluye varios pares clave-valor, entre ellos:
- description: un resumen breve y descriptivo del tipo de entrada. Sólo puedes mostrarlo en la plantilla del tipo de entrada.
- public: cambia la visibilidad de los tipos de entrada personalizados de WordPress para autores y visitantes. Elige TRUE para que aparezca en el Panel de WordPress y en la consulta personalizada de los visitantes.
- menu_position: define la ubicación del nuevo tipo de entrada en el menú de administración de WordPress. Consulta la página del codex de WordPress para conocer su valor y posiciones.
- has_archive: determina los archivos del tipo de entrada personalizado, la estructura de URL y el nombre del slug en función del parámetro 1 de register_post_types().
- show_in_admin_bar: altera la visibilidad del tipo de entrada en la barra superior de administración, en la sección +New.
- show_in_nav_menus: cambia si puedes añadir entradas de este tipo a los menús de navegación creados a través de Apariencia → Menús.
- query_var: establece si los visitantes del sitio pueden introducir el tipo y el título de una entrada como consulta en la URL para verla.
Además de los elementos, $args contiene las matrices $labels y $supports que contienen diferentes pares clave-valor.
Te recomendamos crear una variable $labels separada para guardar todos los pares clave-valor para que el código sea más limpio y fácil de entender.
La matriz $label define el texto del tipo de entrada personalizado y contiene las siguientes claves:
- name: el nombre plural general del tipo de entrada
- singular_name: el nombre de una entrada única del tipo personalizado
- add_new: sustituye el texto “Añadir nuevo”
- add_new_item: cambia el texto de “Añadir nueva entrada”
- edit_item: ajusta el texto de “Editar publicación”
- featured_image: modifica la “Imagen destacada” en el editor de entradas
- set_featured_image: sustituye a “Establecer imagen destacada”
- menu_name: altera el texto del enlace de nivel superior. El texto por defecto del enlace es la clave del nombre
Mientras tanto, la matriz $supports contiene elementos que definen las características del tipo de entrada personalizado. El valor TRUE habilita las siguientes características:
- Título
- Editor
- Autor
- Miniatura
- Extracto
- Trackbacks
- Campos personalizados
- Comentarios
- Revisiones
- Atributos de la página
- Postformatos
Cómo crear un custom post type en WordPress
Hay tres formas diferentes de añadir custom post type en WordPress, y cada una tiene sus pros y sus contras:
- Usar un plugin normal: la más sencillo, pero el custom post type se borrará si desinstalas o desactivas el plugin.
- Editar el archivo functions.php del tema: no requiere una herramienta adicional, pero este método no conserva los datos tras la actualización del tema.
- Crear un plugin específico para el sitio: conserva los datos y es muy personalizable, pero requiere conocimientos técnicos.
En este artículo, utilizaremos el tercer método. Antes de continuar, te recomendamos que leas nuestro tutorial sobre cómo crear un plugin de WordPress para saber más sobre el código personalizado.
Para crear tipos de entrada personalizados, utiliza la función register_post_type(). Esta función recibe dos parámetros: el nombre del custom post type y la matriz $args.
El código del plugin también debe contener funciones personalizadas que llamen a register_post_type(). Recuerda conectar estas funciones al hook de acción init para permitir que el tipo de entrada personalizado se registre correctamente.
Para evitar conflictos con otros plugins, tu función personalizada debe tener un prefijo como ht_.
Aquí tienes un ejemplo de código para un plugin de tipo de entrada Entradas personalizadas:
<?php /* Plugin Name: Custom Post Types Description: Add post types for custom articles Author: Hostinger Dev */ // Hook ht_custom_post_custom_article() to the init action hook add_action( 'init', 'ht_custom_post_custom_article' ); // The custom function to register a custom article post type function ht_custom_post_custom_article() { // Set the labels. This variable is used in the $args array $labels = array( 'name' => __( 'Entradas personalizadas' ), 'singular_name' => __( 'Entrada personalizada' ), 'add_new' => __( 'Entrada personalizada' ), 'add_new_item' => __( 'Añadir entrada personalizada' ), 'edit_item' => __( 'Editar entrada personalizada' ), 'new_item' => __( 'Nueva entrada personalizada' ), 'all_items' => __( 'Todas las entradas personalizada' ), 'view_item' => __( 'Ver entrada personalizada ), 'search_items' => __( 'Buscar entrada personalizada' ), 'featured_image' => 'Poster', 'set_featured_image' => 'Add Poster' ); // The arguments for our post type, to be entered as parameter 2 of register_post_type() $args = array( 'labels' => $labels, 'description' => 'Holds our custom article post specific data', 'public' => true, 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments', 'custom-fields' ), 'has_archive' => true, 'show_in_admin_bar' => true, 'show_in_nav_menus' => true, 'query_var' => true, ); // Call the actual WordPress function // Parameter 1 is a name for the post type // Parameter 2 is the $args array register_post_type('article', $args); }
Ten en cuenta que el código puede variar en función del custom post type. Una vez que hayas terminado de escribir el código, sigue estos pasos para convertirlo en un plugin:
- Copia y pega el código en un editor de texto. Por ejemplo, utilizaremos TextEdit de MacOS.
- Guarda el archivo. Nombra el archivo custom-post-type.php.
- Haz clic en Guardar.
- Abre el gestor de archivos de tu cliente FTP o de tu cuenta de alojamiento. Para los usuarios de Hostinger, ve a tu hPanel → Hosting → Administrar → Archivos → Administrador de Archivos.
- Dentro del Administrador de Archivos, navega hasta public_html → wp-content → plugins.
- Crea una nueva carpeta y nómbrala custom-post-type.
- Pega el archivo en la carpeta.
- Accede a tu panel de control de WordPress. Ve a Plugins → Plugins instalados.
- Busca el plugin Entradas personalizadas y haz clic en Activar.
- Actualiza la página. Deberías ver el tipo de entrada Artículos personalizados en el menú de administración de WordPress.
Puedes crear un número ilimitado de tipos de entradas personalizadas. Sin embargo, demasiados tipos de entrada personalizados pueden ralentizar el descubrimiento de la API REST y complicar la barra de administración.
Cómo personalizar el nuevo tipo de entrada
Puede que necesites personalizar tu nuevo tipo de entrada para diferenciarlo de otros contenidos. Antes de personalizarlo, debes crear archivos de plantilla en el directorio de tu tema activo.
Necesitas dos archivos de plantilla para la personalización: single-{post_type}.php y archive-{post_type}.php. Son plantillas para una entrada individual y para la página de archivo del tipo personalizado, respectivamente.
WordPress utilizará los archivos predeterminados single.php y archive.php si no creas estas plantillas. Puesto que todas las entradas y archivos hacen referencia a esos dos archivos, personalizarlos cambiará todo el sitio.
La mejor forma de crear archivos de plantilla es duplicar los archivos single.php y archive.php existentes de tu tema. Este método mantiene la estructura del tema de tu sitio y establece la etiqueta de plantilla necesaria, simplificando el proceso de personalización.
Aquí tienes los pasos para hacerlo:
- Accede al Administrador de archivos de tu cliente FTP o de tu cuenta de alojamiento.
- Localiza la carpeta de tu tema activo. En nuestro caso, está en /public_html/wp-content/themes/twentytwentyone.
- Copia los archivos single.php y archive.php y pégalos fuera de esa carpeta.
- Cambiales el nombre en función del parámetro 1 de tu register_post_type(). Como nuestro parámetro 1 es article, los nombres son single-article.php y archive.article.php.
- Vuelve a mover los archivos a la carpeta twentytwentyone.
- Repite los pasos dos y tres para otras plantillas de tipos de entrada personalizados.
¡Importante! Los temas con la misma estructura para entradas y páginas no tendrán archivos single.php y archive.php. Estos temas sólo utilizan el archivo singular.php.
Para personalizar los archivos de plantilla, descárgalos y edítalos con un editor de texto. Si utilizas el servicio de alojamiento web de Hostinger, edítalos directamente en el Administrador de archivos.
Una vez guardados los archivos, los cambios sólo se aplicarán a la página de archivo y a la entrada individual del tipo personalizado.
Añadir un meta box a un custom post type
El cuadro meta o meta box es una ventana de la pantalla de edición que permite a los usuarios añadir metadatos de las entradas. Es útil para añadir o modificar la información de las entradas, como los detalles del autor, los controles de publicación y el slug personalizado.
Aunque WordPress incluye meta boxes por defecto, puede que necesites uno específico para tu tipo de entrada personalizada. Por ejemplo, el tipo de entrada personalizada Películas puede requerir el metabox Género.
Utilizar un cuadro meta te ayuda a añadir metadatos a tu contenido más rápidamente. En lugar de introducir el valor individualmente, puedes hacer clic en los datos del cuadro meta para introducirlos.
Para crear un cuadro meta personalizado, edita el archivo functions.php de tu tema o el código del plugin específico del sitio. En este tutorial, añadiremos el código personalizado del nuevo cuadro meta al archivo del plugin.
Dado que el código varía en función del contenido y la ubicación de la meta box, consulta el codex de WordPress para obtener más información. En este tutorial, explicaremos cómo crear una meta box de Autor personalizada:
- Localiza el archivo custom-post-type.php en el gestor de archivos de tu alojamiento o en tu cliente FTP.
- Haz doble clic en el archivo para abrir la pantalla del editor. Alternativamente, descarga y abre el archivo en un editor de texto o de código.
- Crea una metabox personalizada vacía introduciendo el siguiente código:
// Add meta box add_action("add_meta_boxes", "add_author_meta_box"); function add_author_meta_box() { add_meta_box( "author_meta_box", // Meta box ID "Author Details", // Meta box title "author_meta_box_callback", // Meta box callback function "article", // The custom post type parameter 1 "side", // Meta box location in the edit screen "high" // Meta box priority ); } function author_meta_box_callback() { wp_nonce_field(‘author-nonce’, ‘meta-box-nonce’); global $post; placeholder }
- Añade el contenido de la meta box sustituyendo el valor del marcador de posición. Para este tutorial, añadiremos los campos nombre de autor e ID utilizando el siguiente código.
// Add meta box content ?> <th><label for="author_name_field">Author Name</label><th> <td><input type="text" id="author_name" class="regular-text" name=“Author_Name” value=“” /> <td> <th><label for="author_id_field">Author ID</label><th> <td><input type="text" id="author_id" class="regular-text" name=“Author_ID” Value=”” /> <td> <?php
- Al final del código, añade el siguiente fragmento para guardar los valores introducidos:
// Save meta box data add_action ( 'save_post', 'author_save_postdata'); function author_save_postdata( $post_id ) { // If this is an autosave, our form has not been submitted if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return $post_id; // Retrieve post id If (‘article’ !== get_post_type() ) { return $post_id } // Check the user's permissions if ( 'page' == $_POST['post_type'] ) { if ( ! current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( ! current_user_can( 'edit_post', $post_id ) ) return $post_id; } /* OK, it is safe to save the data now. */ // Sanitize user input. $mydata = sanitize_text_field( $_POST['Author_Name'] ); $mydata = sanitize_text_field( $_POST['Author_ID'] ); // Update the meta field in the database. update_post_meta( $post_id, 'Author_Name', $_POST['Author_Name'] ); update_post_meta( $post_id, 'Author_ID', $_POST['Author_ID'] ); }
- En el editor de código del gestor de archivos, haz clic en el icono del disco de la parte superior derecha para guardar el cambio. Si editas el código localmente, guarda y vuelve a subir el archivo actualizado.
El nuevo cuadro meta debería aparecer si abres la pantalla de edición de tu tipo de entrada personalizado.
Para asegurarte de que el meta box funciona correctamente, introduce textos en el campo designado y actualiza la entrada. El valor introducido debería aparecer en los campos personalizados.
Si necesitas familiarizarte más con PHP, utiliza el plugin Meta Box para generar automáticamente el código. Como sólo genera el código del contenido de las meta boxes, debes escribir tú mismo la función add_metabox ().
Después de descargar e instalar el plugin, sigue estos pasos:
- En la barra lateral de WordPress, ve a Plugins → Plugins instalados.
- Busca el plugin Meta Box y haz clic en Acerca de → Ir a Generador Online.
- Crea un cuadro meta personalizado.
- Haz clic en Generar código → Copiar.
- Pega el código en tu archivo functions.php o custom-post-type.php.
Consejo profesional
Utiliza un plugin para añadir código PHP en las entradas o páginas de WordPress directamente a través del panel de administración. No tienes que crear archivos de plantilla ni utilizar un editor de texto independiente, lo que mejora el flujo de trabajo y minimiza los errores.
Cómo mostrar tipos de entrada personalizados en la página principal
Los tipos de entrada personalizados de WordPress no se muestran en la portada por defecto. Para habilitarlos, escribe una nueva función que llame al método set del objeto WP_Query de WordPress.
Aquí un ejemplo:
// Pin our custom function to the pre_get_posts action hook add_action( 'pre_get_posts', 'add_article_to_frontpage' ); // Alter the main query function add_article_to_frontpage( $query ) { if ( is_home() && $query->is_main_query() ) { $query->set( 'post_type', array( 'post', 'article' ) ); } return $query; }
En esta función, $query->set() toma dos parámetros: la propiedad modificada y una matriz que define su valor. En nuestro caso, la propiedad modificada es post_type, mientras que los valores de la matriz son post y article.
El array incluye “post” para mostrar el tipo de post por defecto en la portada de tu web. Si lo eliminas, sólo se mostrarán las entradas personalizadas.
El segundo parámetro es “article”, que muestra las entradas normales y todas las entradas de artículos personalizados en la portada.
Para activar el código, pégalo en el archivo functions.php de tu tema o en el del plugin personalizado. Te mostraremos cómo pegarlo en el plugin:
- Accede a los archivos de tu sitio de WordPress y ve a la carpeta de tu plugin personalizado. La nuestra está en /public_html/wp-content/plugins/custom-post-type.
- Abre el archivo .php. A continuación, copia y pega el código de la parte inferior.
- Pulsa el icono del disco en la parte superior derecha para guardar los cambios.
Los tipos de entrada predeterminados y personalizados deberían estar disponibles en la portada de tu sitio web en WordPress.
Cómo añadir y mostrar un campo personalizado de WordPress
Después de crear un nuevo custom post type, puede que necesites añadir un campo personalizado para dar más detalles a tu contenido.
Para esta tarea, puedes utilizar el campo personalizado integrado de WordPress o un plugin. Como cada método tiene sus pros y sus contras, te explicaremos ambos para ayudarte a decidir cuál te conviene más.
Usar el campo personalizado predeterminado de WordPress
WordPress nos proporciona una herramienta integrada para añadir un campo personalizado. Como está oculto por defecto, actívalo yendo al Editor de entradas → Opción de pantalla.
Una vez activado, verás la sección de campos personalizados en la parte inferior de la pantalla de edición de WordPress. Introduce el nombre y el valor, y haz clic en el botón Añadir campo personalizado.
Sin embargo, los campos personalizados no se mostrarán en el front-end de tu página por defecto. Para activarlos, inserta la función the_meta() o echo get_post_meta() en el archivo de tu tema activo.
Utiliza the_meta() para mostrar todos los campos personalizados de una entrada. Para mostrar un campo personalizado concreto, utiliza echo get_post_meta( $post->ID, ‘clave’, TRUE). Sustituye el valor de la clave por el nombre de tu campo personalizado.
Como hay dos tipos de post, puedes editar single.php o single-article.php. Depende de dónde quieras mostrar el campo personalizado.
Supongamos que quieres añadir un campo personalizado Author para las entradas de tipo artículo personalizado. En ese caso, introduce uno de los códigos de función en el archivo single-article.php. Estos son los pasos:
- Desde tu panel de control de WordPress, dirígete a Apariencia → Editor de temas.
- En el menú Archivos Temáticos, situado a la derecha de tu pantalla, selecciona singe-article.php.
- Localiza el Bucle de WordPress y encuentra esta línea:
get_template_part( 'template-parts/post/content', get_post_format() );
- Pega uno de los códigos de función bajo la línea.
- Haz clic en Actualizar archivo.
Tu sitio web de WordPress mostrará ahora el campo personalizado Author debajo de la entrada.
Limitar los campos personalizados a un tipo de entrada específico mediante un plugin
Lamentablemente, no puedes utilizar la herramienta integrada de WordPress para añadir un campo personalizado para un tipo de entrada específico. Esta herramienta predeterminada añade automáticamente un nuevo campo personalizado para todos los tipos de entrada.
En su lugar, utiliza el plugin Advanced Custom Fields. Este limita ciertos campos personalizados, haciéndolos seleccionables sólo en un tipo de entrada elegido.
¡Importante! Una vez activado este plugin, ya no verás el campo personalizado predeterminado de WordPress en el editor de entradas.
Después de activar el plugin, sigue estos pasos para crear y habilitar un campo personalizado para un tipo de entrada específico:
- Ve a tu barra lateral de WordPress, haz clic en Campos personalizados → Añadir nuevo.
- Introduce el nombre del Nuevo Grupo de Campos.
- Rellena los siguientes datos para tu nuevo campo personalizado:
- Etiqueta de campo: el nombre de tu campo personalizado que se mostrará en la página de edición.
- Nombre del campo: el ID de tu campo personalizado que se utilizará para mostrarlo en tu tema.
- Tipo de campo: elige entre texto, casilla de verificación, URL, etc., en función de tus necesidades.
- Cuando hayas terminado, pulsa Cerrar campo.
- Desplázate hasta la sección Configuración y selecciona la pestaña Reglas de localización.
- Rellena las columnas Mostrar este campo si para definir la condición de visibilidad del campo personalizado. Por ejemplo, para que sea seleccionable en un tipo de entrada Artículo personalizado, elige Tipo de entrada → es igual a → Artículo personalizado.
- Pulsa el botón Guardar cambios.
Puesto que creas este campo a través de un plugin, debes utilizar sus funciones para mostrar el campo personalizado. Los pasos para insertar la función son similares a los de añadir un campo personalizado por defecto, pero introduce la función the_post( ‘key’ ); en su lugar.
Conclusión
Los custom post types en WordPress permiten a los usuarios organizar el contenido de su sitio web en diferentes categorías. Sin embargo, los tipos de entrada predeterminados pueden no ser suficientes para un sitio web grande con contenido diverso.
En ese caso, puedes crear un tipo de entrada personalizado en WordPress creando plugins específicos para el sitio. Aquí tienes un resumen de los pasos:
- Escribe el código del plugin en un editor de texto y guárdalo como .php.
- Crea una carpeta de tipos de entrada personalizados en el directorio de plugins de tu sitio.
- Pega el archivo en la nueva carpeta.
- Ve a tu Panel de administración de WordPress → Plugins → Plugins instalados
- Busca el plugin custom post type y haz clic en Activar.
Tu tipo de entrada personalizado también tiene muchas opciones de personalización. Por ejemplo, puedes personalizar la pantalla de edición, añadir meta boxes, editar la visibilidad del tipo de entrada y activar las funciones integradas de WordPress.
Esta amplia personalización te permite crear un tipo de entrada que se adapte específicamente a tu contenido, ayudándote a organizar tu sitio web de WordPress de forma más rápida y eficaz.
Aprende otras técnicas avanzadas de WordPress
Cómo añadir CSS personalizado en WordPress
Cómo crear widgets personalizados en WordPress
Cómo usar XAMPP para configurar un sitio local de WordPress
Custom post type – Preguntas frecuentes
Esta sección responderá las preguntas comunes sobre el tipo de entrada personalizada de WordPress. No obstante, si tienes más preguntas, déjalas en la acción de comentarios a continuación.
¿Cuál es la diferencia entre un Post y un Custom Post Type?
En WordPress, una entrada puede referirse a una única pieza de contenido. También puede referirse a un tipo de entrada similar a páginas, archivos adjuntos, revisiones y otros.
Por su parte, un custom post type es una categoría de contenido que crean los propios usuarios.
¿Qué puedes cambiar en el Custom Post Type de WordPress?
Puedes cambiar su ubicación en el área de administración, la capacidad de búsqueda y funciones adicionales como extractos, formatos de post y trackbacks.
Además, WordPress también te permite modificar la pantalla de edición de entradas y añadir campos personalizados para incluir más información en tu contenido. Por ejemplo, puedes mostrar el autor de la entrada o el tiempo de lectura.
¿Es posible obtener un ID de tipo de entrada personalizado?
Sí. Para ver el ID de una entrada de WordPress, pasa el ratón por encima del título del contenido y verás la UR en la esquina inferior izquierda. Es el número que hay entre los parámetros “post=” y “&”.
También puedes obtener un ID único de tipo de entrada personalizada por su título utilizando el comando get_page_by_title ().
Alternativamente, recupéralo utilizando slug el comando get_page_by_path ().