php - 按 SKU 数字对 WooCommerce 产品进行排序 (1.2.3.4.5.6.......)
问题描述
在管理产品列表上的 WooCommerce 版本 4.2.2 中,当我尝试按 SKU(列)对产品进行排序时,结果是:1 10 100 101 102 103 104 ...
相反,我希望它按自然顺序排列,例如:1 2 3 4 5 ... 9 10 11 ... 99 ... 100 101 ...
当我使用 WooCommerce 产品搜索(版本 2.21.0)时,也会发生同样的事情。
试图了解正在发生的事情,我注意到如果我在管理面板中搜索产品,它会返回太多结果,而且并非所有产品都会发生这种情况,有些工作它只会给我带来 1 个单一产品,而其他产品会带来更多。
我尝试重新安装所有 Wordpress、WooCommerce 和 WooCommerce 产品搜索,没有任何更改。我用相同的结果测试了其他搜索插件。
请问有什么帮助吗?
解决方案
StackOverFlow 中的规则当时是一个问题……所以我正在回答管理产品列表。
以下挂钩函数将允许按自然排序顺序按数字 sku 对产品进行排序,更改相关 SQL 查询中的ORDER BYABS()
使用:
add_filter( 'posts_clauses', 'admin_products_list_orderby_sku_as_int', 999, 1 );
function admin_products_list_orderby_sku_as_int( $posts_clauses ){
global $pagenow, $typenow, $wp_query;
$query_vars = $wp_query->query_vars;
if ( $pagenow == 'edit.php' && 'product' === $typenow && isset( $_GET['post_type'] )
&& isset( $query_vars['orderby'] ) && 'sku' === $query_vars['orderby'] ) {
$orderby = strtolower( $query_vars['orderby'] );
$order = isset( $query_vars['order'] ) ? strtoupper( $query_vars['order'] ) : 'DESC';
if ( 'DESC' === $order ) {
$posts_clauses['orderby'] = ' ABS( wc_product_meta_lookup.sku ) DESC, wc_product_meta_lookup.sku DESC, wc_product_meta_lookup.product_id DESC ';
} else {
$posts_clauses['orderby'] = ' ABS( wc_product_meta_lookup.sku ) ASC, wc_product_meta_lookup.sku ASC, wc_product_meta_lookup.product_id ASC ';
}
}
return $posts_clauses;
}
代码在您的活动子主题(或活动主题)的functions.php 文件中。测试和工作。
推荐阅读
- java - AWS JAR 文件不会在目标文件夹中构建
- rust - 在不安全的代码中,可变引用的别名是否正确?
- tfs - TFS 2013 审计获取最新版本命令
- angular - Angular 7 - Service Worker PWA + SSR 在服务器上不起作用
- ios - 显示键盘时 WKWebView 出现约束问题
- highcharts - Highchart 注释事件点击获取 xAsix
- angular - mat-select 下拉位置未对齐
- javascript - 如何从 JavaScript 中另一个对象数组中的对象数组中获取底层属性
- python - 是否可以从另一个静态方法调用静态方法
- reactjs - TypeError:导出页面时 Object(...) 不是函数