jmccole83
3/9/2018 - 2:13 PM

WooCommerce | Add sort by name to shop archive

Add the below snippet to functions.php to add sorting by name (asc) to the shop settings.

/*
 * Add sort by name to product archives
 */
 function ordering_args( $sort_args ) {

 $orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
 switch( $orderby_value ) {

     // Name your sortby key whatever you'd like; must correspond to the $sortby in the next function
     case 'slug_asc':
       $sort_args['orderby']  = 'name';
       // Sort by ASC because we're using alphabetic sorting
       $sort_args['order']    = 'asc';
       break;
     case 'slug_desc':
       $sort_args['orderby']  = 'name';
       // Sort by DESC because we're using reverse alphabetic sorting
       $sort_args['order']    = 'desc';
       break;
 }

 return $sort_args;
 }
 add_filter( 'woocommerce_get_catalog_ordering_args', 'ordering_args' );


 // Add these new sorting arguments to the sortby options on the frontend
 function add_new_orderby( $sortby ) {

 // Adjust the text as desired
 $sortby['slug_asc'] = __( 'Sort by name: A-Z', 'woocommerce' );
 $sortby['slug_desc'] = __( 'Sort by name: Z-A', 'woocommerce' );

 return $sortby;
 }
 add_filter( 'woocommerce_default_catalog_orderby_options', 'add_new_orderby' );
 add_filter( 'woocommerce_catalog_orderby', 'add_new_orderby' );