Recientemente he tenido la necesidad de agregar un filtro adicional a la hora de ordenar el listado de productos usando woocommerce, haciendo una búsqueda por papá Google encontré un gist en github que resolvió el requerimiento.

Algunas veces es necesario agregar funcionalidades adicionales a los proyectos porque así lo requiere el modelo de negocio de nuestro proyecto.

Este es el caso de ordenar por sku los productos de una tienda con woocommercer.

Que es sku

Stock-keeping unit o SKU, sin traducción literal al español podría denominarse «código de artículo» o «número de referencia». Asignado a un elemento para poder identificarlo en el inventario físico y/o financiero. El SKU representa para una empresa la unidad mínima de un producto que puede ser vendida, comprada, o gestionada al inventario. Aplicada a la distribución o producción, el SKU se puede utilizar para seguir transacciones y movimientos de inventario, analizar patrones de compra-venta, seguimiento de precios y fluctuaciones en el inventario.

https://es.wikipedia.org/wiki/Stock-keeping_unit

Una de las cosas super interesantes que posee wordpress es el uso de filtros para poder agregar o cambiar una funcionalidad de algo.

En esta oportunidad, lo que necesitaba hacer era agregar una funcionalidad extra a woocommerce_defaultcatalog_orderby

php

/**

* Adds the ability to sort products in the shop based on the SKU

* Can be combined with tips here to display the SKU on the shop page: https://www.skyverge.com/blog/add-information-to-woocommerce-shop-page/

*

* @param array $args the sorting args

* @return array updated args

*/

function svaddsku_sorting( $args ) {

$orderbyvalue = isset( $GET['orderby'] ) ? wcclean( $GET['orderby'] ) : applyfilters( 'woocommercedefaultcatalogorderby', getoption( 'woocommercedefaultcatalogorderby' ) );

if ( 'sku' == $orderby_value ) {

$args['orderby'] = 'meta_value';

$args['order'] = 'asc'; // lists SKUs alphabetically 0-9, a-z; change to desc for reverse alphabetical

$args['metakey'] = 'sku';

}

return $args;

}

addfilter( 'woocommercegetcatalogorderingargs', 'svaddskusorting' );

/**

* Add the option to the orderby dropdown.

*

* @param array $sortby the sortby options

* @return array updated sortby

*/

function svskusorting_orderby( $sortby ) {

// Change text above as desired; this shows in the sorting dropdown

$sortby['sku'] = __( 'Sort by SKU', 'textdomain' );

return $sortby;

}

addfilter( 'woocommercecatalogorderby', 'svskusortingorderby' );
addfilter( 'woocommercedefaultcatalogorderbyoptions', 'svskusortingorderby' );

Hagan clic aquí para ver el script original.