Ordenar por sku con woocommerce
Este artículo tiene más de un año de antigüedad, el contenido pudiera estar obsoleto.
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 woocommerce
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
1 2/** 3* Adds the ability to sort products in the shop based on the SKU 4* 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/ 5* 6* @param array $args the sorting args 7* @return array updated args 8*/ 9 10function svaddsku_sorting( $args ) {11 12 $orderbyvalue = isset( $GET['orderby'] ) ? wcclean( $GET['orderby'] ) : applyfilters( 'woocommercedefaultcatalogorderby', getoption( 'woocommercedefaultcatalogorderby' ) );13 14 if ( 'sku' == $orderby_value ) {15 $args['orderby'] = 'meta_value';16 $args['order'] = 'asc'; // lists SKUs alphabetically 0-9, a-z; change to desc for reverse alphabetical17 $args['metakey'] = 'sku';18 }19 return $args;20}21 22addfilter( 'woocommercegetcatalogorderingargs', 'svaddskusorting' );23 24/**25* Add the option to the orderby dropdown.26*27* @param array $sortby the sortby options28* @return array updated sortby29*/30 31function svskusorting_orderby( $sortby ) {32 // Change text above as desired; this shows in the sorting dropdown33 $sortby['sku'] = __( 'Sort by SKU', 'textdomain' );34 return $sortby;35}36 37addfilter( 'woocommercecatalogorderby', 'svskusortingorderby' );38addfilter( 'woocommercedefaultcatalogorderbyoptions', 'svskusortingorderby' );
Hagan clic aquí para ver el script original.