Apunte, resumen, tutorial, codekata para generar tipos de contenidos en el backend de un WordPress. En el origen de los tiempos todo eran Posts del mismo tipo.. xD ¡y se crearon los tipos de post! Con lo que ya podemos tener de base también las páginas, y podemos generar nuestros propios tipos de posts.
Esto sirve para crear páginas de gestión de por ejemplo productos, servicios, locales, personal, etc..
Al grano, el código fuente
Esto se puede hacer en un plugin nuevo, que podemos poner en el fichero:
wp-content/plugins/jnj-tools/jnj-tools.php
..cuyo contenido podría ser:
<?php
/**
* Plugin Name: Jnj tools
* Plugin URI: https://jnjsite.com/
* Description: General plugin for testing purposes only..
* Version: 1.0
* Author: Jaime Niñoles
* Author URI: https://jnjsite.com/.
*/
defined('ABSPATH') or die('No no no');
define('JNJT_PATH', plugin_dir_path(__FILE__));
add_action('init', 'jnjtools_cpt_create');
function jnjtools_cpt_create()
{
$labels = [
'name' => 'JnjTools',
'singular_name' => 'tool',
'add_new' => 'Add tool',
'add_new_item' => 'Add new tool',
'edit_item' => 'Edit tool',
'new_item' => 'New tool',
'view_item' => 'View tool',
'search_items' => 'Search tool',
'not_found' => 'Tool not found',
'not_found_in_trash' => 'Tools not found in trash',
'parent_item_colon' => '',
];
$args = [
'label' => 'JnjTools',
'labels' => $labels,
'description' => 'Tools for share..',
'public' => true,
'hierarchical' => false,
'exclude_from_search' => false,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
//'show_in_rest' => true,
//'rest_base' => 'post_type',
//'rest_controller_class' => 'WP_REST_Posts_Controller',
'menu_position' => 10,
'menu_icon' => 'dashicons-admin-tools',
'capability_type' => 'post',
'capabilities' => array('edit_post', 'read_post', 'delete_post', 'edit_posts', 'edit_others_posts',
'delete_posts', 'publish_posts', 'read_private_posts'),
'map_meta_cap' => true,
'supports' => array('title', 'editor', 'comments', 'revisions', 'trackbacks', 'author', 'excerpt',
'page-attributes', 'thumbnail', 'custom-fields', 'post-formats'),
'supports' => ['title', 'editor', 'thumbnail', 'excerpt'],
'register_meta_box_cb' => null,
'taxonomies' => 'jnjtools_taxonomy',
'has_archive' => false,
'rewrite' => true,
//'rewrite' => ['slug' => 'jnjtool', 'with_front' => true],
'slug' => 'jnjtool',
'with_front' => true,
'feeds' => true,
'pages' => true,
//'ep_mask' =>EP_PERMALINK,
//'query_var' => 'jnjtool',
//'can_export' => true,
//'delete_with_user' => false,
'_builtin' => false,
//'_edit_link' => 'post.php?post=%d',
];
register_post_type('jnjtool', $args);
}
Más información en la documentación oficial aquí:
https://developer.wordpress.org/reference/functions/register_post_type/
¡Un saludo!