Cómo Agregar una Taxonomía Personalizada al Plugin WooCommerce
Estoy tratando de agregar una Taxonomía Personalizada a WooCommerce apuntando al tipo de publicación product en WooCommerce. Usé el siguiente código y lo agregué en functions.php
. No obtengo ningún mensaje de error, pero la taxonomía no se muestra en WooCommerce. ¿Pueden decirme cómo puedo hacer esto o qué estoy haciendo mal aquí?
<?php
// Registrar Taxonomía Personalizada
function custom_taxonomy_Item() {
$labels = array(
'name' => 'Elementos',
'singular_name' => 'Elemento',
'menu_name' => 'Elemento',
'all_items' => 'Todos los Elementos',
'parent_item' => 'Elemento Padre',
'parent_item_colon' => 'Elemento Padre:',
'new_item_name' => 'Nombre del Nuevo Elemento',
'add_new_item' => 'Agregar Nuevo Elemento',
'edit_item' => 'Editar Elemento',
'update_item' => 'Actualizar Elemento',
'separate_items_with_commas' => 'Separar Elementos con comas',
'search_items' => 'Buscar Elementos',
'add_or_remove_items' => 'Agregar o eliminar Elementos',
'choose_from_most_used' => 'Elegir entre los Elementos más usados',
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
);
register_taxonomy( 'item', 'product', $args );
}
?>
Actualización
<?php
add_action( 'init', 'custom_taxonomy_Item' );
// Registrar Taxonomía Personalizada
function custom_taxonomy_Item() {
$labels = array(
'name' => 'Elementos',
'singular_name' => 'Elemento',
'menu_name' => 'Elemento',
'all_items' => 'Todos los Elementos',
'parent_item' => 'Elemento Padre',
'parent_item_colon' => 'Elemento Padre:',
'new_item_name' => 'Nombre del Nuevo Elemento',
'add_new_item' => 'Agregar Nuevo Elemento',
'edit_item' => 'Editar Elemento',
'update_item' => 'Actualizar Elemento',
'separate_items_with_commas' => 'Separar Elementos con comas',
'search_items' => 'Buscar Elementos',
'add_or_remove_items' => 'Agregar o eliminar Elementos',
'choose_from_most_used' => 'Elegir entre los Elementos más usados',
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
);
register_taxonomy_for_object_type( 'item', 'product', $args );
}
?>
Tienes que hacer:
add_action( 'init', 'custom_taxonomy_Item' );
Porque:
Usa la acción init para llamar a esta función. Llamarla fuera de una acción puede causar problemas.
ver página del codex register_taxonomy. Además de eso:
Mejor prevenir que lamentar al registrar taxonomías personalizadas para tipos de contenido personalizados. Usa register_taxonomy_for_object_type() justo después de la función para interconectarlos. De lo contrario podrías encontrarte con problemas donde el tipo de contenido no está adjunto dentro de los filtros que se ejecutan durante
parse_request
opre_get_posts
.
Así que mejor añade:
register_taxonomy_for_object_type( 'item', 'product' );
Además de leer las páginas del codex enlazadas, podrías echar un vistazo a:
Todo esto junto debería ayudarte a empezar.
**Edición:**
Como dije en el comentario, funciona para mí, este es el Código:
add_action( 'init', 'custom_taxonomy_Item' );
function custom_taxonomy_Item() {
$labels = array(
'name' => __('Ítems'),
'singular_name' => __('Ítem'),
'menu_name' => __('Ítems'),
'all_items' => __('Todos los ítems'),
'parent_item' => __('Ítem padre'),
'parent_item_colon' => __('Ítem padre:'),
'new_item_name' => __('Nombre del nuevo ítem'),
'add_new_item' => __('Añadir nuevo ítem'),
'edit_item' => __('Editar ítem'),
'update_item' => __('Actualizar ítem'),
'separate_items_with_commas' => __('Separar ítems con comas'),
'search_items' => __('Buscar ítems'),
'add_or_remove_items' => __('Añadir o eliminar ítems'),
'choose_from_most_used' => __('Elegir entre los ítems más usados'),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
);
register_taxonomy( 'item', 'product', $args );
register_taxonomy_for_object_type( 'item', 'product' );
}

Hola ialocin, gracias por tu comentario y sugerencias. Actualicé el código como publiqué arriba pero "Item" aún no aparece en el Menú de Woocommerce

Tienes que agregar register_taxonomy_for_object_type
y no reemplazar register_taxonomy
. Funciona en mi entorno de desarrollo. Por cierto, los atributos de producto también son taxonomías personalizadas. @user1760110

gracias, ahora funciona PERO no está agregando ningún Término al producto. si haces clic en el Ítem e intentas agregar un nuevo Ítem, ¡no hace nada!

Gracias por tu ayuda, voy a aceptar tu comentario como respuesta correcta, sin embargo tengo que averiguar por qué no agrega términos.

@user1760110 Tengo el mismo problema, el código anterior no me está agregando nuevos términos, ¿encontraste una solución a tu problema?
