Masqtto
En WordPress Woocommerce, he creado un producto agrupado, con muchos subproductos (hijos) en él. Intenté buscar en todas partes, pero no puedo encontrar una solución funcional para ordenarlos por SKU o nombre de producto. Parece que su orderby es generado solo por “Orden de menú”. Aunque como tengo más de 30 subproductos en estos múltiples productos agrupados, sería una gran pérdida de tiempo ordenarlos por valor de pedido de menú.
Probé el siguiente código, pero parece que funcionó en WC 2.5, pero no en 3.0+.
add_filter( 'woocommerce_grouped_children_args',
'so_22661392_grouped_children_args' );
function so_22661392_grouped_children_args( $args ){
$args['meta_key'] = 'sku';
$args['orderby'] = 'meta_value';
$args['order'] = 'ASC';
return $args;
}
También busqué explicaciones en Google pero no pude encontrar ninguna. Traté de borrar los transitorios, esto no funciona tan bien:
WooCommerce>System Status>Tools>Clear Transients
El producto agrupado se puede ver en https://plastmet.ee/uus/toode/umartoru-kork-zzo-pealekaiv/ . La tabla html debería coincidir con los niños a continuación, pero no es así. SKU para niños es “563/9005”, “567/9005”, etc.
¡Cualquier ayuda sería muy apreciada!
birgire
Espero haber entendido bien el problema:
Si hemos anulado el archivo de plantilla single-product/add-to-cart/grouped.php
entonces podríamos usar por ejemplo:
if( $grouped_products )
usort( $grouped_products, 'wc_products_array_orderby_title' );
para ordenar los productos agrupados por títuloen lugar del predeterminado menú ordenando
También podríamos dar de baja:
add_action( 'woocommerce_grouped_add_to_cart', 'woocommerce_grouped_add_to_cart', 30 );
con una devolución de llamada personalizada en su lugar.
Como último recurso, se podría anular la woocommerce_grouped_add_to_cart()
función, por ejemplo, dentro de un complemento, para cambiar el orden del menú.
Se define como:
if ( ! function_exists( 'woocommerce_grouped_add_to_cart' ) ) {
function woocommerce_grouped_add_to_cart() {
global $product;
$products = array_filter( array_map( 'wc_get_product', $product->get_children() ) );
if ( $products ) {
usort( $products, 'wc_products_array_orderby_menu_order' );
wc_get_template( 'single-product/add-to-cart/grouped.php', array(
'grouped_product' => $product,
'grouped_products' => $products,
'quantites_required' => false,
) );
}
}
}
donde uno podría, por ejemplo, usar wc_products_array_orderby_title
en cambio.
-
Gracias. Este filtro que se eliminó se detalla aquí cuando se agregó a WooCommerce y luego no se documentó y se eliminó sin saber cómo reemplazarlo. Los productos agrupados son un producto principal con productos secundarios en la página única del producto. github.com/woocommerce/woocommerce/issues/8820
– Cristina
22 de junio de 2017 a las 12:43
-
Supongo que una forma adecuada es usar un aviso de desaprobación para desarrolladores, por ejemplo
apply_filters_deprecated
. ¿Está buscando formas de ordenar el$grouped_products
¿formación? Miré en la dinámicawoocommerce_product_get_children
filtro (que vi en lo profundo de una clase con elget_prop()
método 😉 pero solo se aplica antes delwc_products_array_orderby_menu_order
ordenar de$grouped_products
. @cristina– birgire
22 de junio de 2017 a las 14:49
-
Póngase en contacto con los desarrolladores si no hay documentación sobre esto. Responden de manera muy oportuna.
– Shawn
23 de junio de 2017 a las 19:06
Ese filtro se eliminó de 3.0 y no se documentó. Abre un problema en GitHub. github.com/woocommerce/woocommerce/problemas
– Cristina
19 de junio de 2017 a las 19:09
Publiqué algo, tú también deberías: github.com/woocommerce/woocommerce/pull/… Abrir un nuevo ticket
– Cristina
19 de junio de 2017 a las 19:13
¿Alguna forma de agregar este filtro orderby al código mientras tanto?
– Masqtto
20 de junio de 2017 a las 11:42
No, el filtro ya no está, por lo que tendrías que escribir tu propia función, por lo que sé. Publicaría en el repositorio de github para ver cuál es la respuesta. Por lo general, son útiles para señalar en la dirección correcta.
– Cristina
20 de junio de 2017 a las 15:05
Agregué una recompensa y cambié el título.
– Cristina
21 de junio de 2017 a las 18:35