Volvemos a un post de ordenar los productos en WooCommerce, algo que parece muy complicado pero no lo es. Después de ver cómo ordenarlos manualmente, poner los agotados al final y cambiar el orden de las variaciones y atributos… Hoy toca que por defecto salgan de forma desordenada, sin ningún tipo de orden por defecto.
Índice
Asignar por defecto en el catálogo
Para ello como siempre, añadiremos el siguiente código al fichero functions.php de nuestro child theme o bien en nuestro plugin de funcionalidades como explico aquí.
add_filter('woocommerce_get_catalog_ordering_args', 'orden_por_defecto_random');
function orden_por_defecto_random($args) {
if( is_shop() && ( ! isset($_GET['orderby']) || 'menu_order' === $_GET['orderby'] ) ) {
$args['orderby'] = 'rand';
return ($args);
}
}
Con esto saldrán aleatorios por defecto. Aun así, desde el selector de orden, los podrán cambiar por precio, popularidad, etc. Usar este código, no significa que cada vez que actualices saldrán nuevos productos, ya que para eso habría que cambiar más archivos y no sería tan simple.
Esta funcionalidad viene bien cuando aun no has ordenado nada o tienes tantos productos que para ti es mejor ponerlos de forma «random» y listo.
Dar la opción al usuario de ordenar los productos
En este caso los podemos mostrar desordenados pero desde el selector de ordenar por… Aunque con una imagen seguro que lo entendemos mejor:

Para conseguir esto añadimos este código:
add_filter( 'woocommerce_get_catalog_ordering_args', 'ordenar_productos_aleatoriamente_con_selector' );
function ordenar_productos_aleatoriamente_con_selector( $args ) {
$orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
if ( 'random_list' == $orderby_value ) {
$args['orderby'] = 'rand';
$args['order'] = '';
$args['meta_key'] = '';
}
return $args;
}
add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );
function custom_woocommerce_catalog_orderby( $sortby ) {
$sortby['random_list'] = 'Aleatoriamente';
return $sortby;
}
Si añadimos este, no hace falta añadir el anterior. Este es para darle la opción al usuario de mostrarlo así y en el anterior cuando entran, ya están desordenados.
Espero como siempre que os haya ayudado, y cualquier otra duda os leo en comentarios.
Deja una respuesta