Como crear custom post type en wordpress

¿Qué son los Custom Post Type de WordPress?

WordPress es una plataforma donde podemos crear cualquier tipo de contenido. Los Custom Post type son una de las principales herramientas para personalizar WordPress y mostrar información en tu sitio web. En este tutorial veremos todo lo que necesitas saber sobre los custom post typesCPT– y como crearlos.

Antes de empezar a hablar sobre los custom post type – en adelante, CPT– debemos saber que es un post type. De acuerdo con el codex de WordPress, un post es un item único de un tipo de contenido y este tipo de contenido es lo que llamamos como post type.

WordPress houses lots of different types of content and they are divided into something called Post Types. A single item is called a post however this is also the name of a standard post type called posts. By default WordPress comes with a few different post types which are all stored in the database under the wp_posts table.

https://wordpress.org/support/article/post-types/

WordPress ya viene por defecto con algunos post types creados:

  • Post (Entradas): Este tipo de contenido se usa para las publicaciones de nuestro blog.
  • Page (Páginas): Es otro tipo de contenido que representa cada una de las páginas que desarrollamos.
  • Attachment (Media): Es el tipo de contenido que usamos para subir archivos como imágenes, pdf, fuentes, etc.
  • Revision (Revisiones): Almacena cada una de las actualizaciones que hagamos sobre nuestras entradas del blog o páginas.

A nivel interno, todos estos tipos de contenido –post type , PT– se almacenan en una tabla de la base de datos llamada wp_posts y se diferencian entre ellos por la columna post_type.

¿Qué es un CPT en WordPress?

Tal y como el nombre indica, es un tipo de contenido definido por nosotros. Haciendo esto, podemos extender las posibilidades que ofrece WordPress, por ejemplo podemos crear los siguientes CPT: un portafolio, libros, películas, reservas, menus, etc.

Crear un CPT en WordPress es muy sencillo, todo lo que tenemos que hacer es copiar el siguiente código en el fichero functions.php o crear un plugin que lo ejecute. También existen generadores de código online que permiten crear el código de manera automática.

// Register Custom Post Type
 function custom_post_type() {
     $labels = array(
                        'name'                  => _x( 'Libros', 'Post Type General Name', 'text_domain' ),
                        'singular_name'         => _x( 'Libro', 'Post Type Singular Name', 'text_domain' ),
                        'menu_name'             => __( 'Libros', 'text_domain' ),
                        'name_admin_bar'        => __( 'Añadir nuevo', 'text_domain' ),
                        'parent_item_colon'     => __( 'Parent Item', 'text_domain' ),
                        'all_items'             => __( 'Todos los Items', 'text_domain' ),
                        'add_new_item'          => __( 'Añadir nuevo Item', 'text_domain' ),
                        'add_new'               => __( 'Añadir nuevo', 'text_domain' ),
                        'new_item'              => __( 'No encontrado', 'text_domain' ),
                        'edit_item'             => __( 'Modificar Item', 'text_domain' ),
                        'update_item'           => __( 'Actualizar Item', 'text_domain' ),
                        'view_item'             => __( 'Ver Item', 'text_domain' ),
                        'search_items'          => __( 'Buscar Item', 'text_domain' ),
                        'not_found'             => __( 'No encontrado', 'text_domain' ),
                        'not_found_in_trash'    => __( 'No encontrado en la papelera', 'text_domain' ),
              );
     $args = array(
                        'label'                 => __( 'Post Type', 'text_domain' ),
                        'description'           => __( 'Información sobre colección de libros', 'text_domain' ),
                        'labels'                => $labels,
                        'supports'              => array(
                                                       'title' , 
                                                       'editor' , 
                                                       'thumbnail' , 
                                                       'excerpt' 
                                                   ),
                       
                        'public'                => false, //El valor false, es en caso de que no desees hacer este post type público, es decir, se crea pero no se puede trabajar con él y por tanto sus posts no estarían accesibles.
                        
              );
      flush_rewrite_rules(); //Borrón y cuenta nueva
      register_post_type( 'Libro', $args ); //Registro del CPT
  }
add_action( 'init', 'custom_post_type', 0 );

En una publicación anterior, ya hablé sobre los roles de usuario en WordPress. En resumen, existen diferentes roles de usuario y habrá casos en los que querremos limitar el uso de nuestro CPT para ciertos usuarios. En estos casos, se pueden añadir algunas líneas al registro de nuestro CPT:

function custom_post_type() {
    $labels = array(
               'name'                  => _x( 'Libros', 'Post Type General Name', 'text_domain' ),
               'singular_name'         => _x( 'Libro', 'Post Type Singular Name', 'text_domain' ),
               'menu_name'             => __( 'Libros', 'text_domain' ),
               'name_admin_bar'        => __( 'Añadir nuevo', 'text_domain' ),
               'parent_item_colon'     => __( 'Parent Item', 'text_domain' ),
               'all_items'             => __( 'Todos los Items', 'text_domain' ),
               'add_new_item'          => __( 'Añadir nuevo Item', 'text_domain' ),
               'add_new'               => __( 'Añadir nuevo', 'text_domain' ),
               'new_item'              => __( 'No encontrado', 'text_domain' ),
               'edit_item'             => __( 'Modificar Item', 'text_domain' ),
               'update_item'           => __( 'Actualizar Item', 'text_domain' ),
               'view_item'             => __( 'Ver Item', 'text_domain' ),
               'search_items'          => __( 'Buscar Item', 'text_domain' ),
               'not_found'             => __( 'No encontrado', 'text_domain' ),
               'not_found_in_trash'    => __( 'No encontrado en la papelera', 'text_domain' ),      
               );
   $args = array(
               'label'                 => __( 'Post Type', 'text_domain' ),
               'description'           => __( 'Información sobre colección de libros', 'text_domain' ),
               'labels'                => $labels,
               'supports'              => array(
                                            'title' , 
                                            'editor' , 
                                            'thumbnail' , 
                                            'excerpt' 
                                             ),
               'public'                => true, //No olvidemos poner este valor a true.
               'publicly_queryable' => true, 
               'capability_type'   => 'libro', //Nombre de la capacidad, que generalmente suele coincidir con nuestro CPT para hacerlo identificable
		'capabilities'      => array( //Lista de capacidades que podremos configurar
				            'publish_posts' => 'publish_libros',
				            'edit_posts' => 'edit_libros',
				            'edit_others_posts' => 'edit_others_libros',
				            'delete_posts' => 'delete_libros',
				            'delete_others_posts' => 'delete_others_libros',
				            'read_private_posts' => 'read_private_libros',
				            'edit_post' => 'edit_libro',
				            'delete_post' => 'delete_libro',
				            'read_post' => 'read_libro',
				        ),
                        
        );
 flush_rewrite_rules(); //Borrón y cuenta nueva
 register_post_type( 'Libro', $args ); //Registro del CPT
}
add_action( 'init', 'custom_post_type', 0 );

El código anterior nos crea el conjunto de capacidades que podemos configurar desde nuestro wordpress usando el plugin user role editor

Permisos concedidos a un Custom Post Type para un grupo de usuarios.
Muestra las capacidades que pueden ser usadas y sobre que grupo de usuarios se aplican

Hemos añadido capacidades con el post type y estas capacidades se pueden aplicar a nuestros usuarios basándonos en su rol de usuario.

Hay diferentes formas de crear un CPT y aquí hemos representado una. Si deseas saber más sobre el registro de CPT o sobre algún método del que no hayamos hablado aquí, ponte en contacto conmigo, o indícamelo con un comentario.

Happy coding!

Deja un comentario

Tu dirección de correo electrónico no será publicada.