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 elorderbyde la URL essku, le dice a WooCommerce que ordene pormeta_valueusando 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 awoocommerce_default_catalog_orderby_optionspara 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.
Y si la tienda es de un cliente y prefieres no tocar el functions.php a ciegas, puedo encargarme: desarrollo con WordPress y WooCommerce.
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.
¿Tienes un proyecto en mente?
Trabajo con Laravel, WordPress, SEO técnico y servidores MCP. El primer paso es una llamada de descubrimiento, sin costo ni compromiso, donde me cuentas qué necesitas y te digo con honestidad si puedo ayudarte.