0

I want my products to be sorted by price (ascending) and products, which are out of stock be placed at the end of the products list. How can I achive this in WooCommerce?

Is it ever possible to implement?

I'm using Wordpress 4.9.7, WooCommerce 3.4.3

1 Answer 1

0

The solution is old as time is.

And it was already described earlier. Place in functions.php

class iWC_Orderby_Stock_Status
{

 public function __construct()
 {
  // Check if WooCommerce is active
  if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) {
   add_filter('posts_clauses', array($this, 'order_by_stock_status'), 2000);
  }
 }

 public function order_by_stock_status($posts_clauses)
 {
  global $wpdb;
  // only change query on WooCommerce loops
  if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag())) {
   $posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
   $posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
   $posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
  }
  return $posts_clauses;
 }
}

new iWC_Orderby_Stock_Status;

And all is in the bag. This solution fits my needs.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.