Помощь Товары "нет в наличии" всегда в конце списка - Woocommerce

Skorp1oN

Мастер
Регистрация
16 Дек 2007
Сообщения
387
Реакции
31
Добрый день!
Столкнулся с проблемой, что сейчас товары вперемешку, те которые в наличии и нет. Нашел такое решение, чтобы товары которых нет в наличии, перемещались в конец списка товаров:
Код:
add_filter( 'woocommerce_get_catalog_ordering_args', 'truemisha_sort_by_stock', 25 );
function truemisha_sort_by_stock( $args ) {
    $args[ 'meta_key' ] = '_stock_status';
    $args[ 'orderby' ] = 'meta_value';
    $args[ 'order' ] = 'ASC';
    return $args;
}
Код работает, но только для сортировки которая по умолчанию и товары в таком случае в каком-то непонятно порядке выводятся вообще. Но и есть еще большой минус - работает только в сортировке по умолчанию. Если выбрать любую другую сортировку - сразу все товары перемешиваются.
Собственно, прошу помощи, подскажите пожалуйста плагин какой-то, чтобы решал данную задачу - при любой сортировке товары которых "нет в наличии" всегда были в конце списка.
p.s. прятать товары которых нет в наличии, к сожалению не целесообразно т.к. надо чтобы они всегда были в индексе.
Заранее спасибо за помощь!
 

Skorp1oN

Мастер
Регистрация
16 Дек 2007
Сообщения
387
Реакции
31
Нашел на другом форуме решение, вдруг кому поможет:
Код:
class iWC_Orderby_Stock_Status{

    public function __construct(){
        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;
        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;
 
Сверху