Php 按品牌名称a-z排序优先于所有其他分类法 有关该问题的最新情况*

Php 按品牌名称a-z排序优先于所有其他分类法 有关该问题的最新情况*,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,所以!我一直在使用下面L7c1f3r发布的代码,但我似乎无法让它正常工作。我不得不以某种方式将分类法声明为$args的一个可排序变量,但我找不到任何有用的帖子-我已经尝试了我找到的大多数答案,但仍然不走运。任何帮助都将不胜感激 原职 关于stackoverflow的第一个问题 我有一个wordpress开发网站,在那里我使用Woocommerce插件来销售产品。我也有品牌插件。我们公司主要围绕品牌营销产品。因此,我一直在寻找一种方法来覆盖woocommerce产品归档页面上的默认排序选项,以按品

所以!我一直在使用下面L7c1f3r发布的代码,但我似乎无法让它正常工作。我不得不以某种方式将分类法声明为$args的一个可排序变量,但我找不到任何有用的帖子-我已经尝试了我找到的大多数答案,但仍然不走运。任何帮助都将不胜感激

原职 关于stackoverflow的第一个问题

我有一个wordpress开发网站,在那里我使用Woocommerce插件来销售产品。我也有品牌插件。我们公司主要围绕品牌营销产品。因此,我一直在寻找一种方法来覆盖woocommerce产品归档页面上的默认排序选项,以按品牌名称的字母顺序排列,而不是其他标准选项

更新:澄清假定的功能*

产品A属于品牌A

产品B属于品牌B

产品C属于A品牌

订单应输出如下产品:

产品A、品牌A

产品C,品牌A

产品B,品牌B

在网上搜索了很多答案后,我发现了以下片段:

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


$taxonomies = array('product_brand');

$orderBy['field'] = "product_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';
    $clauses['orderby'] .= ", {$wpdb->posts}.post_title ASC"; 
    return $clauses;
}

else {
    return $clauses;
}



}
但是,代码片段完成了这项工作——它还从视图和使用中删除了所有其他分类法(帖子、图像等)。查看之前和之后的图像

认为问题在于,代码片段假设所有类型的分类法都有一个名为“brand”的字段与之关联,这就是为什么当它在post taxonomy中找不到它时,会将其全部删除的原因。我试图声明产品分类法,并将其作为可靠变量添加到if语句中,但没有效果

是否有人知道如何使此函数仅为分类“product_brand”运行?或者,如果有更好的方法来完成我想要完成的事情,我会非常感谢你的帮助