Snippet para agregar todas las categorias respetando las jerarquias:
<?php
function agregar_categorias_productos_recursivamente($menu_id, $categorias, $menu_item_ids, $parent_id = 0) {
foreach ($categorias as $categoria) {
if ($categoria->parent == $parent_id) {
// Si la categoría tiene un padre, busca su ID de menú
$menu_item_parent_id = isset($menu_item_ids[$categoria->parent]) ? $menu_item_ids[$categoria->parent] : 0;
// Crear el elemento del menú
$menu_item_id = wp_update_nav_menu_item($menu_id, 0, [
'menu-item-title' => $categoria->name,
'menu-item-url' => get_term_link($categoria->term_id, 'product_cat'),
'menu-item-status' => 'publish',
'menu-item-parent-id' => $menu_item_parent_id,
'menu-item-type' => 'taxonomy',
'menu-item-object' => 'product_cat',
'menu-item-object-id' => $categoria->term_id,
]);
// Almacenar el ID del elemento del menú
$menu_item_ids[$categoria->term_id] = $menu_item_id;
// Llamar recursivamente para agregar subcategorías
agregar_categorias_productos_recursivamente($menu_id, $categorias, $menu_item_ids, $categoria->term_id);
}
}
}
function agregar_categorias_productos_al_menu($menu_id) {
// Obtén todas las categorías de productos
$categorias = get_terms([
'taxonomy' => 'product_cat',
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => false,
]);
// Mapa para mantener la jerarquía de ID de menú
$menu_item_ids = [];
// Comienza con los elementos raíz (parent_id = 0)
agregar_categorias_productos_recursivamente($menu_id, $categorias, $menu_item_ids);
}
// Hook para ejecutar la función al crear el menú
add_action('init', function () {
$menu_id = 73;
// Limpiar el menú antes de agregar categorías
$menu_items = wp_get_nav_menu_items($menu_id);
if (!empty($menu_items)) {
foreach ($menu_items as $menu_item) {
wp_delete_post($menu_item->ID, true);
}
}
// Agregar categorías al menú
agregar_categorias_productos_al_menu($menu_id);
});