• Saul

    (@slightlyfaulty)


    This is a very poor implementation of sorting out of stock products last.

    Firstly, the code was blatantly stolen from Business Bloomer without giving credit.

    More importantly, it doesn’t just sort out of stock products last, it completely overrides the sorting of your products, so that selecting “Latest”, “Best Sellers”, etc. no longer works.

    And it doesn’t even do that right. It sorts in stock products first, then products on backorder, and then out of stock products.

    This was also brought to the author’s attention many months ago by @fightingbettas in a support topic, which went completely ignored.

    If you want to do this properly, use something like this:

    add_filter('posts_orderby', function($orderby, $query) {
    	global $wpdb;
    	static $oos_sql;
    
    	if ($query->is_singular || !$query->is_main_query() || $query->get('wc_query') !== 'product_query' || is_admin()) {
    		return $orderby;
    	}
    
    	if ($oos_sql === null) {
    		$oos_term = get_term_by('name', 'outofstock', 'product_visibility');
    		$oos_sql = "{$wpdb->posts}.ID IN (SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = {$oos_term->term_taxonomy_id}) ASC";
    	}
    
    	$orderby = $oos_sql . ', ' . $orderby;
    
    	return $orderby;
    }, 10, 2);
  • The topic ‘Do not use this plugin (Working code included)’ is closed to new replies.