【发布时间】:2022-01-24 21:01:23
【问题描述】:
我想让类别列在此处的产品管理页面上可排序:
/wp-admin/edit.php?post_type=product
我真的很难弄清楚这一点......关于如何做到这一点的信息并不多!
仅仅添加 add_filter manage_edit-product_sortable_columns 是不够的。
请参阅下面的答案以获取解决方案。
【问题讨论】:
标签: woocommerce
我想让类别列在此处的产品管理页面上可排序:
/wp-admin/edit.php?post_type=product
我真的很难弄清楚这一点......关于如何做到这一点的信息并不多!
仅仅添加 add_filter manage_edit-product_sortable_columns 是不够的。
请参阅下面的答案以获取解决方案。
【问题讨论】:
标签: woocommerce
我们要做的第一件事是使用过滤器 manage_edit-product_sortable_columns 使列顶部的类别标题可单击以进行排序
然后我们需要使用过滤器posts_clauses 对列中的类别进行实际排序。这实际上非常复杂,此链接帖子中的答案非常有帮助(代码基本上是复制并粘贴了一些更改):Make Featured column sortable in Woocommerce admin products list
// make header of column clickable for sort
add_filter('manage_edit-product_sortable_columns', 'abcxyz_sortable_product_columns_header');
function abcxyz_sortable_product_columns_header( $sortable_columns ) {
$sortable_columns['product_cat'] = 'product_cat';
return $sortable_columns;
}
// sort the categories column when clicked
add_filter('posts_clauses', 'abcxyz_sortable_product_column_product_cat', 11, 2 );
function abcxyz_sortable_product_column_product_cat( $clauses, $wp_query ) {
global $wpdb;
$taxonomy = 'product_cat';
$term = 'product_cat';
if ( isset( $wp_query->query['orderby'] ) && $term == $wp_query->query['orderby'] ) {
$clauses['join'] .=<<<SQL
LEFT OUTER JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id
LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id)
LEFT OUTER JOIN {$wpdb->terms} USING (term_id)
SQL;
$clauses['where'] .= " AND (taxonomy = '{$taxonomy}' OR taxonomy IS NULL)";
$clauses['groupby'] = "object_id";
$clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) ";
$clauses['orderby'] .= ( 'ASC' == strtoupper( $wp_query->get('order') ) ) ? 'ASC' : 'DESC';
}
return $clauses;
}
【讨论】: