Skip to main content

Para crear un custom post type en wordpress se recomienda crear, dentro de la carpeta del tema, una carpeta llamada “cpt”. Dentro de esta carpeta se creará un archivo .php, en este ejemplo usaremos productos por lo que usaremos el nombre producto.php.

Dentro del archivo functions.php se debe requerir el archivo creado de la siguiente manera:

require_once 'cpt/productos.php';

Dentro del archivo productos.php debemos incluir el siguiente código para crear el CPT:

function cpt_productos() {
    $labels = array(
        'name'                => _x( 'Productos', 'Post Type General Name', 'salient' ),
        'singular_name'       => _x( 'Producto', 'Post Type Singular Name', 'salient' ),
        'menu_name'           => __( 'Productos', 'salient' ),
        'parent_item_colon'   => __( 'Producto superior', 'salient' ),
        'all_items'           => __( 'Todos los productos', 'salient' ),
        'view_item'           => __( 'Ver producto', 'salient' ),
        'add_new_item'        => __( 'Nuevo producto', 'salient' ),
        'add_new'             => __( 'Nuevo', 'salient' ),
        'edit_item'           => __( 'Editar', 'salient' ),
        'update_item'         => __( 'Actualizar', 'salient' ),
        'search_items'        => __( 'Buscar', 'salient' ),
        'not_found'           => __( 'No encontrado', 'salient' ),
        'not_found_in_trash'  => __( 'No encontrado en la papelera', 'salient' ),
    );
    $args = array(
        'label'               => __( 'productos', 'salient' ),
        'description'         => __( 'Productos de ENSA', 'salient' ),
        'labels'              => $labels,
        'supports'            => array( 'title', 'editor', 'author', 'thumbnail', 'comments', 'revisions', ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_position'       => 5,
        'can_export'          => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'post',
        'show_in_rest' => true,
 
    );
    register_post_type( 'producto', $args );
}
add_action( 'init', 'cpt_productos', 0 );

Una vez inscluido esto, si se requiere crear una taxonomía personalizada para dicho ejemplo se debe usar un código similar al siguiente:

function tax_producto_tipo() {
  $labels = array(
    'name'             => _x( 'Tipos', 'taxonomy general name' ),
    'singular_name'    => _x( 'Tipo', 'taxonomy singular name' ),
    'search_items'     =>  __( 'Buscar por Tipo' ),
    'all_items'        => __( 'Todos los Tipos' ),
    'parent_item'      => __( 'Tipo padre' ),
    'parent_item_colon'=> __( 'Tipo padre:' ),
    'edit_item'        => __( 'Editar Tipo' ),
    'update_item'      => __( 'Actualizar Tipo' ),
    'add_new_item'     => __( 'Añadir nuevo Tipo' ),
    'new_item_name'    => __( 'Nombre del nuevo Tipo' ),
  );
  register_taxonomy( 'tipo', array( 'producto' ), array(
    'hierarchical'       => true,
    'labels'             => $labels,
    'show_ui'            => true,
    'query_var'          => true,
    'rewrite'            => array( 'slug' => 'tipo' ),
  ));
}
add_action( 'init', 'tax_producto_tipo', 0 );