在Woocommerce中按品牌和标题对产品进行排序

时间:2018-12-20 10:33:47

标签: php wordpress sorting woocommerce product

在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;
}
}

有什么办法可以使产品对象添加第二个 orderby 子句?

1 个答案:

答案 0 :(得分:1)

能够解决问题。

就像注释掉最后一个“ orderby”行一样简单,因为它有点多余,可以通过数据库对象获取posts表。

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