[Помогите] Отображение товаров которых нет в наличии внизу страници Woocommerce

Тема в разделе "Wordpress", создана пользователем Glaras, 1 окт 2015.

Модераторы: Sorcus
  1. Glaras

    Glaras Постоялец

    Регистр.:
    28 сен 2013
    Сообщения:
    106
    Симпатии:
    6
    Подскажите как сделать так чтобы товары которые есть в наличии отображались первыми, а все которых нет в наличиии отображались после них, у меня сейчас они все в перемешку: http://www.podario.com/starbucks/
     
  2. Федя К.

    Федя К. Постоялец

    Регистр.:
    21 авг 2007
    Сообщения:
    125
    Симпатии:
    91
    Такой функции по умолчанию нет в woocoomerce
    Я думаю что это можно решить через https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
     
  3. Glaras

    Glaras Постоялец

    Регистр.:
    28 сен 2013
    Сообщения:
    106
    Симпатии:
    6
    Есть кто-то кто делал уже подобное? хотелось бы знать есть ли решение
     
  4. Федя К.

    Федя К. Постоялец

    Регистр.:
    21 авг 2007
    Сообщения:
    125
    Симпатии:
    91
    Попробуй вставь в конец файла /functions.php своей темы

    Вот этот код:

    Код:
    add_filter( 'posts_join','join_product_stock', 10, 2 );
    function join_product_stock($join) {
        global $wp_query, $wpdb;
    
            $join .= " LEFT JOIN $wpdb->postmeta {$wpdb->prefix}stock_status ON {$wpdb->prefix}stock_status.post_id = {$wpdb->posts}.ID AND {$wpdb->prefix}stock_status.meta_key = '_stock_status' LEFT JOIN $wpdb->postmeta {$wpdb->prefix}stock ON {$wpdb->prefix}stock.post_id = {$wpdb->posts}.ID AND {$wpdb->prefix}stock.meta_key = '_stock'";
        return $join;
    }
    
    add_filter('posts_orderby', 'product_stock_orderby');
    function product_stock_orderby($orderby_statement) {
            $orderby_statement = " wp_stock_status.meta_value ASC, wp_stock.meta_value ASC ";
            return $orderby_statement;
    }
     
  5. Glaras

    Glaras Постоялец

    Регистр.:
    28 сен 2013
    Сообщения:
    106
    Симпатии:
    6
    Спасибо, результат есть, но почему-то некоторыетовары этот код действительно переставил в конец, а некоторые очутились в самом начале) http://www.podario.com/shop/

    Нашел, товары с вариациями (выбор цвета) не уходят в конец, а наоборот идут в перед

    Скорее всего дело в том что каждая вариация в отдельности имеет свой статус наличия и даже если товара нет в наличии этот статус вариации все равно остается "В наличии"...думаю как решить...не менять же статус вариаций...хотя сейчас сайт не большой, но все же

    Нужно какое-то другое решение...дело в том что работа этого не нравиться, даже банальный фильтр по возрастанию-убыванию цен не работает с ним( но спасибо вам

    Может кому будет полезно, это решило: http://woocommerce-russian.ru/sortirovka-tovar-po-nalichiyu/
     
    Последнее редактирование модератором: 28 дек 2015
    zdrx1 нравится это.
  6. Федя К.

    Федя К. Постоялец

    Регистр.:
    21 авг 2007
    Сообщения:
    125
    Симпатии:
    91
    Скорее всего да, что-то с фильтром. По идее

    Код:
    $orderby_statement = " wp_stock_status.meta_value ASC, wp_stock.meta_value ASC ";
    они должны быть вверху если поставить вместо ASC ---> DESC

    Пока не знаю в чем конкретно проблема