Ordenar productos en WooCommerce por cantidad

webempresa woocommerce diegol

Por defecto en WooCommerce, podemos ordenar productos por precio, popularidad, reviews y orden alfabético. Por lo que no podemos ordenarlos por disponibilidad, es decir, mostrar los productos con más cantidad de inventario primero y al final los que tienen existencias cero.

En un tutorial anterior enseñé a poner por defecto que los productos agotados saliesen al final del catálogo. Pero esto solo hacía que se pusiesen al final y sin ningún control para el usuario. Además ambos códigos son incompatibles, usas este o el que te voy a explicar.

En este caso lo que vamos a hacer, es que sea opcional para el cliente ordenarlos por cantidad:

ordenar por inventario woocommerce

Para conseguir mostrar en el filtro de la tienda y categorías esta opción de filtrar por cantidad, deberemos añadir este código al functions.php de nuestro Child Theme o bien en nuestro plugin de funcionalidades como explico aquí.

// Ordering products based on the selected values
function filter_woocommerce_get_catalog_ordering_args( $args, $orderby, $order ) {    
    switch( $orderby ) {
        case 'availability':
            $args['orderby']  = 'meta_value_num';
            $args['order']    = 'DESC';
            $args['meta_key'] = '_stock';
            break;
    }

    return $args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'filter_woocommerce_get_catalog_ordering_args', 10, 3 );

// Orderby setting
function filter_orderby( $orderby ) {
    $orderby['availability'] = __( 'Cantidad de inventario', 'woocommerce' );
    return $orderby;
}
add_filter( 'woocommerce_default_catalog_orderby_options', 'filter_orderby', 10, 1 );
add_filter( 'woocommerce_catalog_orderby', 'filter_orderby', 10, 1 );

// Optional: use for debug purposes (display stock quantity) 
function action_woocommerce_after_shop_loop_item() {
    global $product;
    echo '<div style="color: red !important; font-size: 20px !important;">' . wc_get_stock_html( $product ) . '</div>';
}
add_action( 'woocommerce_after_shop_loop_item', 'action_woocommerce_after_shop_loop_item', 9, 0 );

Con este snippet será de mayor a menor, si lo quieres mostrar de menor a mayor cambia el atributo order por:

$args 'order' = 'asc'

Espero que os haya servido y cualquier duda como siempre os leo en comentarios!

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)

Especialista en Comercio electrónico con Woocommerce. Te ayudo a crear, gestionar y publicitar tu Ecommerce en función de tu sector y público objetivo. Puedes encontrarme en Diegol.top

¿Necesitas ayuda con este tutorial? Mándame un correo y te resuelvo todas las dudas!


Ver servicios Curso de WooCommerce

También puedes realizar una donacion para seguir apoyando la salida de nuevos tutoriales y actualizaciones

Reader Interactions

Deja una respuesta

Tu dirección de correo electrónico no será publicada.