Como crear menú desplegable de variaciones en el artículo
-
Buenas:
Necesitaría ayuda para una opción que he visto en otras páginas.
Dado un artículo, por ejemplo revólver, que haya un producto base, y a través de un menú desplegable puedas configurarlo, y te vayan apareciendo las distintas modalidades y precios.
Ejemplo: según el mango del revólver, color, y combinaciones entre ellos.
La página con la que necesito ayuda: [accede para ver el enlace]
Viendo 1 respuesta (de un total de 1)
-
Hay dos formas:
- La más facil es programar un menú a mano, donde mediante las funciones nativas de WordPress y WooCommerce puedas traer productos y categorías e ir armando el bucle:
<ul class="menu-productos">
<?php $productos = wc_get_products([
'featured' => true,
'limit' => -1,
]);
foreach ($productos as $producto) { ?>
<li>
<a href="<?php echo get_permalink($producto->get_id()); ?>">
<?php echo $producto->get_name(); ?>
</a>
<?php if ($producto->is_type('variable')) : ?>
<ul class="submenu-variaciones">
<?php $variaciones = $producto->get_children();
foreach ($variaciones as $var_id) :
$variacion = wc_get_product($var_id); ?>
<li>
<a href="<?php echo get_permalink($producto->get_id()); ?>?attribute_<?php echo key($variacion->get_attributes()); ?>=<?php echo current($variacion->get_attributes()); ?>">
<?php echo implode(' / ', $variacion->get_attributes()); ?>
</a>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>2. La segunda opción es usando el filter llamado «wp_nav_menu_objects» que permite manipular el menú nativo de WordPress y ahí se trae los productos
<?php add_filter('wp_nav_menu_objects', 'terraquea_menu_destacados_variaciones', 10, 2);
function terraquea_menu_destacados_variaciones($items, $args) {
foreach ($items as $item) {
if ($item->title === 'Destacados') {
$parent_id = $item->ID;
$productos = wc_get_products([
'featured' => true,
'limit' => -1,
]);
foreach ($productos as $producto) {
$new_item = new stdClass();
$new_item->ID = 100000 + $producto->get_id();
$new_item->title = $producto->get_name();
$new_item->url = get_permalink($producto->get_id());
$new_item->menu_item_parent = $parent_id;
$new_item->type = 'custom';
$new_item->object = 'custom';
$new_item->classes = [];
$items[] = $new_item;
if ($producto->is_type('variable')) {
foreach ($producto->get_children() as $var_id) {
$variacion = wc_get_product($var_id);
$sub_item = new stdClass();
$sub_item->ID = 200000 + $var_id;
$sub_item->title = implode(' / ', $variacion->get_attributes());
$sub_item->url = get_permalink($producto->get_id());
$sub_item->menu_item_parent = $new_item->ID;
$sub_item->type = 'custom';
$sub_item->object = 'custom';
$sub_item->classes = [];
$items[] = $sub_item;
}
}
}
}
}
return $items;
} ?>
Viendo 1 respuesta (de un total de 1)
Debes estar registrado para responder a este debate.