WordPress

Ordenar productos por SKU en WooCommerce

Autorangel cruz
Actualizado
Publicado
Lectura3 min de lectura
Ordenar productos por SKU en WooCommerce

Para ordenar los productos por SKU en WooCommerce necesitas dos cosas: un filtro que agregue la opción "Ordenar por SKU" al selector de la tienda, y otro que modifique la consulta para que ordene por el campo _sku. Son unas 20 líneas de PHP, sin plugin. Aquí está el código completo y dónde ponerlo.

Qué es el SKU

El SKU (Stock-Keeping Unit) es el código interno con el que identificas cada producto en tu inventario. En WooCommerce se guarda en la metadata del producto bajo la clave _sku, y por defecto la tienda no ofrece ordenar por ese campo: solo por popularidad, precio, valoración, etc. Eso es lo que vamos a añadir.

El código

WooCommerce usa filtros (hooks) para modificar su comportamiento sin tocar el core. Aprovechamos dos:

/**
 * 1) Modifica la consulta para ordenar por el SKU cuando se elige esa opción.
 */
function sv_add_sku_sorting( $args ) {
    $orderby_value = isset( $_GET['orderby'] )
        ? wc_clean( $_GET['orderby'] )
        : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
 
    if ( 'sku' === $orderby_value ) {
        $args['orderby']  = 'meta_value';
        $args['order']    = 'asc'; // 0-9, a-z; usa 'desc' para el orden inverso
        $args['meta_key'] = '_sku';
    }
 
    return $args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'sv_add_sku_sorting' );
 
/**
 * 2) Añade la opción "Ordenar por SKU" al selector de la tienda.
 */
function sv_sku_sorting_orderby( $sortby ) {
    $sortby['sku'] = __( 'Ordenar por SKU', 'textdomain' );
    return $sortby;
}
add_filter( 'woocommerce_catalog_orderby', 'sv_sku_sorting_orderby' );
add_filter( 'woocommerce_default_catalog_orderby_options', 'sv_sku_sorting_orderby' );

Cómo funciona

  • El primer filtro (woocommerce_get_catalog_ordering_args) intercepta los argumentos de la consulta del catálogo. Cuando el orderby de la URL es sku, le dice a WooCommerce que ordene por meta_value usando la meta_key _sku (que es donde WooCommerce guarda el SKU).
  • El segundo (woocommerce_catalog_orderby) agrega la entrada "Ordenar por SKU" al desplegable que ve el cliente. La añadimos también a woocommerce_default_catalog_orderby_options para que puedas dejarla como orden por defecto en los ajustes.

Dónde colocarlo

Pon este código en el functions.php de tu tema hijo, o mejor, en un plugin de snippets (como Code Snippets) para que no se pierda al cambiar de tema. Evita editar el functions.php del tema padre: una actualización lo sobrescribe.

Y pruébalo en local antes de tocar la tienda en producción: un pre_get_posts mal puesto afecta a todas las consultas del sitio, no solo al listado de productos. Si no tienes un entorno local montado, WordPress Studio levanta uno en un par de clics.

Preguntas frecuentes

¿Cómo ordeno los productos de WooCommerce por SKU?

Con dos filtros de PHP: uno que añade la opción "Ordenar por SKU" al selector (woocommerce_catalog_orderby) y otro que modifica la consulta para ordenar por la meta_key _sku (woocommerce_get_catalog_ordering_args). El código completo está arriba.

¿Necesito un plugin para ordenar por SKU?

No. Son ~20 líneas de PHP con los hooks de WooCommerce. Puedes ponerlas en el functions.php de tu tema hijo o en un plugin de snippets.

¿Dónde guarda WooCommerce el SKU?

En la tabla de metadatos del producto (wp_postmeta), bajo la clave _sku. Por eso el filtro ordena por meta_value con meta_key = '_sku'.

¿Puedo ordenar por SKU de forma descendente?

Sí, cambia $args['order'] = 'asc' por 'desc' en el primer filtro.