Задать вопрос

Товары без цены или с ценой 0 в конце списка?

Имею магазин на вордпресс+вукомерс тема сторфронт.
Как сделать, чтобы товары без цены или с ценой 0 показывались в конце списка товаров и исключались из сортировки ?
Эти коды не работают.
add_filter('posts_clauses', 'order_by_stock_status', 50, 2);
function order_by_stock_status($posts_clauses) {
    global $wpdb;
    if (!is_admin() && is_woocommerce() && (is_shop() || is_product_category() || is_product_tag() || is_product_taxonomy())) {
        $posts_clauses['orderby'] = "price_query.price > 0 DESC, " . $posts_clauses['orderby'];
    }
    return $posts_clauses;
}

и это
add_filter('posts_clauses', 'order_by_no_price', 50, 2);
function order_by_no_price($posts_clauses) {
    global $wpdb;
    if (!is_admin() && is_woocommerce() && (is_shop() || is_product_category() || is_product_tag() || is_product_taxonomy())) {
        if($posts_clauses['join']!=' LEFT JOIN wp_wc_product_meta_lookup wc_product_meta_lookup ON wp_posts.ID = wc_product_meta_lookup.product_id '){
            $posts_clauses['join'] = $posts_clauses['join'] . " LEFT JOIN wp_wc_product_meta_lookup wc_product_meta_lookup ON wp_posts.ID = wc_product_meta_lookup.product_id ";   
        }       
        $posts_clauses['orderby'] = "wc_product_meta_lookup.min_price > 0 DESC, " . $posts_clauses['orderby'];
    }   
    return $posts_clauses;
}

Вопрос трехлетней давности без решения Как сделать сортировку товаров в Woocommerce чтобы товары без цены или с ценой 0 показывались в конце списка?
Неработает Cортировка товаров в Woocommerce: чтобы товары без цены или с ценой 0 показывались в конце списка?
==============
СТРАННО что модератор сайта переставил статус вопроса со сложного на легкий, три года нет решения и вопрос легкий\. так напишите решение если так.
  • Вопрос задан
  • 384 просмотра
Подписаться 5 Сложный 2 комментария
Решения вопроса 1
wporgru
@wporgru
https://wp.org.ru
Для себя решил это с помощью следующего костыля:

1. Стоял уже код, выводящий Цена по запросу для цены 0. Заменил в коде 0 на 9999999999, ибо такой цены у меня быть не может:
// для цены 9999999999 выводить "цена по запросу"
function my_price_replace($price, $product) {
if ($product->get_price() == 9999999999 ) return __( 'Цена по запросу' );
return $price;
}
add_filter( 'woocommerce_get_price_html', 'my_price_replace', 1, 2 );

2. В массовом редакторе заменил цены товаров с 0 на 9999999999
3. Сортировка товаров по-умолчанию - по возрастанию цены

Эффект достигнут
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы