Php 按品牌名称a-z排序优先于所有其他分类法 有关该问题的最新情况*
所以!我一直在使用下面L7c1f3r发布的代码,但我似乎无法让它正常工作。我不得不以某种方式将分类法声明为$args的一个可排序变量,但我找不到任何有用的帖子-我已经尝试了我找到的大多数答案,但仍然不走运。任何帮助都将不胜感激 原职 关于stackoverflow的第一个问题 我有一个wordpress开发网站,在那里我使用Woocommerce插件来销售产品。我也有品牌插件。我们公司主要围绕品牌营销产品。因此,我一直在寻找一种方法来覆盖woocommerce产品归档页面上的默认排序选项,以按品牌名称的字母顺序排列,而不是其他标准选项 更新:澄清假定的功能* 产品A属于品牌A 产品B属于品牌B 产品C属于A品牌 订单应输出如下产品: 产品A、品牌A 产品C,品牌A 产品B,品牌B 在网上搜索了很多答案后,我发现了以下片段:Php 按品牌名称a-z排序优先于所有其他分类法 有关该问题的最新情况*,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,所以!我一直在使用下面L7c1f3r发布的代码,但我似乎无法让它正常工作。我不得不以某种方式将分类法声明为$args的一个可排序变量,但我找不到任何有用的帖子-我已经尝试了我找到的大多数答案,但仍然不走运。任何帮助都将不胜感激 原职 关于stackoverflow的第一个问题 我有一个wordpress开发网站,在那里我使用Woocommerce插件来销售产品。我也有品牌插件。我们公司主要围绕品牌营销产品。因此,我一直在寻找一种方法来覆盖woocommerce产品归档页面上的默认排序选项,以按品
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”运行?或者,如果有更好的方法来完成我想要完成的事情,我会非常感谢你的帮助