Poner automáticamente los productos agotados al final en WooCommerce

En otros tutoriales hemos visto la importancia de ordenar los productos en el catálogo o bien qué hacer con los productos agotados. Vamos a combinar ambos conceptos: Conseguir que los que no tengan stock salgan al final del listado.

Aspectos a tener en cuenta

Antes de daros la solución me gustaría que valoraseís si es necesario hacer esto, os lo recomiendo en los siguientes casos:

  • Soléis tener muchos productos agotados y no os da tiempo a ordenarlos o eliminarlos.
  • Los productos sin stock raramente los reponéis, por lo tanto no es necesario mostrarlo o pedir el mail para avisarles.
  • Os gusta dar una buena imagen y que el cliente vea siempre al principio productos de los que disponéis.

Si es este vuestro caso u os da igual y queréis hacerlo igualmente… Añadid este código a vuestro functions.php de vuestro child theme o más fácilmente a vuestro plugin Code Snippets como explico aquí.

Mostrar los productos sin stock al final

add_filter('posts_clauses', 'sin_stock_al_final_woocommerce');
function sin_stock_al_final_woocommerce($posts_clauses) {
    global $wpdb;
    // Solo cambiar la consulta en los bucles de WooCommerce
    if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag() || is_product_taxonomy())) {
        $posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
        $posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
        $posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
    }
    return $posts_clauses;
}

Este código no altera vuestro orden manual, solo los muestra al final del cada categoría. Pasando de esto:

mostrar los productos agotados al final automaticamente
Sin mostrarlos al final

Y cuando aplicamos el snippet:

poner productos sin stock al final woocommerce
Los muestra al final de la categoría

Ordenarlos por cantidad de inventario

Otra consulta común es cómo ordenar el catálogo por los productos que más inventario tienen(algo que no viene por defecto en WooCommerce) para ello usaremos el siguiente código:

add_filter( 'woocommerce_get_catalog_ordering_args', 'dl_orden_stock_woo', 9999 );
 
function dl_orden_stock_woo( $args ) {
   $args['orderby'] = 'meta_value';
   $args['order'] = 'ASC';
   $args['meta_key'] = '_stock_status';
   return $args;
}
¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)

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 Contactar

También puedes suscribirte a mi newsletter para no perderte ninguna novedad

Reader Interactions

comentarios

  1. Patowins says

    Buen día…
    …Probé el código y me arrojó un error:

    Detalles del error
    ==================
    Se ha producido un error del tipo E_COMPILE_ERROR en la línea 11 del archivo /wp-content/plugins/insert-php/admin/metaboxes/base-options.php(764) : eval()’d code. Mensaje de error: Cannot redeclare sin_stock_al_final_woocommerce() (previously declared in /wp-content/plugins/insert-php/includes/class.execute.snippet.php(634) : eval()’d code:2)

    Uso:
    WordPress versión 5.7.1
    Tema actual: Envo Shop (versión 1.0.9)
    Plugin actual: Woody code snippets (PHP snippets | Insert PHP) (versión 2.4.1)
    PHP versión 7.3.27

    • Diegol says

      Hola Patowins,

      Por lo que veo al insertar esta función de choca con otra funcionalidad que ya tienes instalada dentro de WordPress. Revisa los archivos que te menciona el error y busca la funcion sin_stock_al_final_woocommerce()

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *