Crear un Custom Post Type en WordPress

WordPress ofrece una variedad de tipos de entradas para ayudarte a organizar el contenido de tu sitio web. Es fácil crear un blog cronológico o mostrar páginas estáticas con ellos.

Sin embargo, los tipos de entrada incorporados pueden no ser adecuados para sitios web grandes con una amplia gama de contenido. En ese caso, debes crear el tipo de entrada que necesitas.

Esta guía te mostrará cómo crear un tipo de entrada personalizado o Custom Post Type (CPT) en WordPress. Además, aprenderás cómo personalizarlo para que sea más funcional.

¿Qué es un Custom Post Type en WordPress?

Un Custom Post Type de WordPress es una categoría adicional de contenido que los usuarios crean para organizar el contenido de su sitio web. Es beneficioso si el contenido de tu sitio web de WordPress es diverso y no se ajusta a los tipos de entrada predeterminados de WordPress.

Los diferentes tipos de entradas de WordPress

Aunque puedes agrupar todo tipo de contenido en categorías, tus publicaciones aparecerán en una lista cuando estén agrupadas en el mismo tipo de publicación. Esto hace que sea más difícil rastrear tus publicaciones.

WordPress tiene siete categorías de entradas por defecto:

La categoría de entradas es para entradas regulares. Una entrada de blog es un ejemplo típico de contenido de este tipo.

  • Entradas: categoría para entradas o posts 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 custom post type de WordPress te permiten elegir una sección específica para tu contenido. Puedes realizar fácilmente un seguimiento de las entradas en diferentes secciones y agrupar rápidamente el contenido sin elegir categorías.

Los tipos de custom post type de WordPress también ofrecen una variedad de opciones de personalización. Esto te brinda la capacidad de expandir su funcionalidad más allá de las entradas predeterminadas.

Puedes, por ejemplo, cambiar el aspecto de la pantalla de edición, mover el menú del custom post type personalizado y activar funciones como imágenes destacadas o extractos.

Elementos de un Custom Post Type o CPT en WordPress

Conoce los términos array y element antes de crear custom post types. Estos son componentes cruciales del código de tu tipo de entrada único.

Una estructura de datos que almacena pares de clave y valor se llama array. Reserva las propiedades del tipo de entrada personalizado en este caso.

Hay tres matrices con diferentes elementos: $args, $labels y $supports, que se pueden usar para crear un tipo de entrada personalizado de WordPress. La abreviatura de argumentos es la matriz asociativa $args, que contiene múltiples pares clave-valor.

  • 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.

$args, además de los elementos, contienen las matrices $labels y $supports, cada una de las cuales contiene varios pares de clave-valor.

Para hacer el código más limpio y fácil de entender, te sugerimos crear una variable $labels independiente para guardar todos los pares de clave-valor.

El texto del tipo de entrada personalizado se define en la matriz $label, que incluye las claves siguientes:

  • 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

La matriz $supports, por otro lado, contiene elementos que definen las características del tipo de entrada personalizado. El valor TRUE permite la habilitación de las siguientes características:

  • Título
  • Editor
  • Autor
  • Miniatura
  • Extracto
  • Trackbacks
  • Campos personalizados
  • Comentarios
  • Revisiones
  • Atributos de la página
  • Postformatos

Cómo crear Custom Post Type o CPT en WordPress

Hay tres métodos diferentes para agregar un custom post type en WordPress, cada uno con sus ventajas y desventajas:

  • Usar un plugin: este es el método más sencillo, pero si desinstalas o desactivas el plugin, el tipo de publicación personalizado se eliminará.
  • Editar el archivo functions.php del tema: este método no guarda los datos después de actualizar el tema, pero no requiere una herramienta adicional.
  • Crear un plugin específico para el sitio web: guarda los datos y es extremadamente personalizable, pero requiere habilidades técnicas.

Esta guía abordará el tercer método.

La función register_post_type() se puede utilizar para crear custom post types. La función recibe dos parámetros: el nombre del custom post type y la matriz $args.

El código del plugin debe incluir funciones personalizadas que llamen a register_post_type(). Para garantizar que el tipo de entrada personalizado se registre correctamente, no olvides conectar estas funciones al botón de acción init.

Para evitar conflictos con otros plugins, usa un prefijo como ht_ en tu función personalizada.

Un ejemplo de código para un plugin de tipo de entrada «Mi CPT», puede ser el siguiente:

<?php
/*
Plugin Name: Mi CPT
Description: Add post types for custom articles
Author: Guías DonWeb
*/
// 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 según el tipo de publicación personalizado. Para convertir el código en un plugin, sigue estos pasos:

  1. Copia y pega el código anterior en un editor de texto, como el Bloc de notas en Windows o TextEdit en MacOS.
  2. Guarda el documento. Indica el nombre del archivo custom-post-type.php.
  3. Abre el gestor de archivos de tu cuenta de alojamiento o del cliente FTP. Para los usuarios de DonWeb, ve a Ferozo > Mi Sitio Web > Administrador de archivos.
  4. Busca public_html > wp-content > plugins en el Administrador de Archivos.
  5. Crea una nueva carpeta y nómbrala custom-post-type.
  6. Pega el archivo a la carpeta.
Crear un Custom Post Type en WordPress - 1
Crear un Custom Post Type en WordPress
  1. Entra en tu panel de control de WordPress. Ve a Plugins, luego a Plugins instalados.
  2. Encuentra el plugin Mi CPT y haz clic en Activar.
Crear un Custom Post Type en WordPress - 2
Crear un Custom Post Type en WordPress
  1. Actualiza el sitio web. En el menú de administración de WordPress, debes ver el tipo de entrada «Artículos personalizados».

¿Cómo ajustar el nuevo tipo de entrada?

Para distinguir tu nuevo tipo de entrada de otros contenidos, puede que tenga que ajustarlo. Antes de hacerlos, debes crear archivos de plantilla en el directorio del tema que estás utilizando actualmente.

La personalización requiere dos archivos de plantilla: single-{post_type}.php y archive-{post_type}.php. Son plantillas para una sola entrada y una página de archivo custom post type.

Si no creas estas plantillas, WordPress utilizará los archivos predeterminados single.php y archive.php. Personalizar estos dos archivos cambiará todo el sitio porque todas las entradas y archivos hacen referencia a ellos.

El método más efectivo para crear archivos de plantilla es duplicar los archivos single.php y archive.php que ya tienes en tu tema. Este método facilita el proceso de personalización al mantener la estructura del tema de tu sitio y establecer la etiqueta de plantilla requerida.

Aquí están las instrucciones para hacerlo:

  1. Accede al Administrador de archivos de tu cuenta de alojamiento o de tu cliente FTP.
  2. Busca la carpeta del tema activo. Se encuentra en /public_html/wp-content/themes/twentytwentythree en nuestro caso.
  3. Los archivos single.php y archive.php deben copiarse y moverse de esa carpeta.
  4. 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.
  5. Ahora, mueve los archivos a la carpeta twentytwentythree.
  6. Para otras plantillas de custom post types, repite los pasos dos y tres.

Descárgalos y edítalos con un editor de texto para personalizar los archivos de plantilla. Si utilizas el servicio de alojamiento web de DonWeb, 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 CPT.

Agregar un meta box a un Custom Post Type

El cuadro meta, también conocido como meta box, es una ventana de la pantalla de edición que permite a los usuarios agregar metadatos a las entradas. Es útil agregar o cambiar detalles de entradas como detalles del autor, controles de publicación y slug personalizados.

Aunque WordPress tiene meta boxes por defecto, puede que necesites una específica para tu custom post type. El tipo de entrada «Películas» puede requerir el meta box «Género», por ejemplo.

Puede agregar metadatos rápidamente a tu contenido con un meta box. Puedes hacer clic en los datos del meta box en lugar de introducir el valor individualmente.

Edite el archivo functions.php de tu tema o el código del plugin específico del sitio para crear un meta box personalizado. En esta guía, añadiremos el código personalizado del nuevo meta box al archivo del plugin.

Consulta el codex de WordPress para obtener más información, ya que el código varía según el contenido y la ubicación del meta box. En esta guía, hablaremos sobre cómo crear un meta box de Autor personalizado:

  1. El archivo custom-post-type.php debe encontrarse en el administrador de archivos de tu alojamiento o en su cliente de FTP.
  2. Para acceder a la pantalla del editor, haz doble clic en el archivo. Alternativamente, descarga el archivo y abre en un editor de código o de texto.
  3. Utiliza el código siguiente para crear un meta box personalizado vacíp:
// 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
}
  1. Añade contenido del meta box al reemplazar el valor del marcador de posición. Utilizaremos el siguiente código para agregar los campos de nombre de autor e ID en esta guía.
// 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 
  1. Al final del código, agrega la sección siguiente para guardar los valores que se han introducido:
// 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'] ); 
 }
  1. Guarda los cambios en el editor del administrador de archivos de tu hosting o sube el archivo editado en tu computadora, según sea el caso.

Si abres la pantalla de edición del tipo de entrada personalizado, debería aparecer el nuevo meta box.

Conclusiones

En WordPress, los custom post types permiten a los usuarios organizar el contenido de tu sitio web en diferentes categorías. Sin embargo, para un sitio web grande con mucho contenido, los tipos de entrada predeterminados pueden no ser suficientes.

En este caso, puedes crear un CPT o custom post type en WordPress creando plugins específicos para el sitio. Aquí hay un resumen de las etapas:

  1. Escribe el código del plugin en un editor de texto y luego guárdalo en un archivo .php.
  2. En el directorio de plugins de tu sitio, crea una carpeta para el plugin.
  3. Guarda el archivo en la carpeta recién creada.
  4. Ve al Panel de administración de WordPress > Plugins > Plugins instalados.
  5. Busca el plugin creado y luego haz clic en Activar.

Hay muchas opciones de personalización para tu CPT. Puedes ajustar la pantalla de edición, agregar meta boxes, cambiar la visibilidad del tipo de entrada y activar las funciones integradas de WordPress, por ejemplo.

Esta amplia personalización te permite crear un tipo de entrada que se adapte específicamente a tu contenido, lo que ayuda a organizar mejor tu sitio web de WordPress.

Franco Silvetti
Franco Silvetti

Freelancer especializado en WordPress, con más de 4 años de experiencia.