Сортировать товары по бренду и названию в Woocommerce - PullRequest
0 голосов
/ 20 декабря 2018

В Woocommerce я в настоящее время пытаюсь изменить значение по умолчанию orderby, чтобы отображать продукты, отсортированные по марке и названию.

Бренды производятся с помощью совершенных брендов Woocommerce.Мне удалось получить заказ по слизням бренда (так я и установил их заказ).Я также использую плагин WOOF (фильтр продуктов Woocommerce) для фильтрации по категории / бренду.

Я сортирую товары по таксономии wpb-brand и ищу способк вторичной сортировке по названию продукта, но я не знаю, как я могу это сделать.

Это мой код:

add_filter('posts_clauses', 'posts_clauses_with_tax', 10, 2);
function posts_clauses_with_tax( $clauses, $wp_query ) {
global $wpdb;

$taxonomies = array('pwb-brand');

$orderBy['field'] = "pwb-brand";
$orderBy['direction'] = "ASC";

if( in_array($orderBy['field'], $taxonomies) ) {
    $clauses['join'] .= "
        LEFT OUTER JOIN {$wpdb->term_relationships} AS rel2 ON {$wpdb->posts}.ID = rel2.object_id
        LEFT OUTER JOIN {$wpdb->term_taxonomy} AS tax2 ON rel2.term_taxonomy_id = tax2.term_taxonomy_id
        LEFT OUTER JOIN {$wpdb->terms} USING (term_id)
    ";

    $clauses['where'] .= " AND (taxonomy = '".$orderBy['field']."' OR taxonomy IS NULL)";
    $clauses['groupby'] = "rel2.object_id";
    $clauses['orderby']  = "GROUP_CONCAT({$wpdb->terms}.slug ORDER BY slug ASC) ";
    $clauses['orderby'] .= ( 'ASC' == strtoupper( $orderBy['direction'] ) ) ? 'ASC' : 'DESC';
    return $clauses;
}
else {
    return $clauses;
}
}

Можно ли каким-либо образом получить объект products длядобавить второе orderby предложение?

1 Ответ

0 голосов
/ 20 декабря 2018

удалось решить эту проблему.

Это было так же просто, как закомментировать последнюю строку 'orderby', так как она была несколько избыточной и получить таблицу сообщений через объект базы данных.

//$clauses['orderby'] .= ( 'ASC' == strtoupper( $orderBy['direction'] ) ) ? 'ASC' : 'DESC';
$clauses['orderby'] .= ", {$wpdb->posts}.post_title ASC"; 
...