Woocommerce 分类下的产品如何使用ID号来作为默认排序字段
2014-10-30 17:55
661 查看
在给一个客户开发网店系统时使用了WordPress系统的Woocommerce插件
WordPress版本:3.8
Woocommerce版本:2.0.20
如果没有指定排序规则(指定的字段),则Woocommerce默认使用的是"post_title"来排序的,但我在调用分类下的产品时使用"ID"字段来自定义排序规则,但实际上却并未按照自定义的规则来排序,而是使用”ORDER BY menu_order,post_title ASC“来排序(在product_category方法里没有对ID进行排序处理)
在Woocommerce插件帮助里找到了自定义规则但还是没有解决
在Google上搜索了半天也没有找到解决办法,于是转而去看源码解决,于是在\wp-content\plugins\woocommerce\classes\class-wc-shortcodes.php里找到product_category方法的定义并输出排序信息
前台生成的Sql语句
在前台发现输出的排序规则跟我自定义的规则并不一样,接着继续查看\wp-content\plugins\woocommerce\classes\class-wc-query.php里的get_catalog_ordering_args方法
原来get_catalog_ordering_args方法在对排序时又进行了处理,所以不符合以上规则的该方法会重新设置排序规则,还好该方法提供了一个"woocommerce_get_catalog_ordering_args"filter
于是在funciton里重新定义"woocommerce_get_catalog_ordering_args"并返回我自定义的排序规则总算可以按照ID来排序了,将下面的代码添加到主题的function里
下面是前台页面打印的Sql语句
至此就解决Woocommerce默认使用ID来排序分类下的产品,但有一个问题是我如果按照"menu_order"先降序然后再按照ID来降序这种通过多个字段来进行排序的话好像不行
在WordPress->WP_Query类里好像不能按照多个字段来排序(Woocommerce最后是调用WP_Query来获取数据的),如果出现多个排序字段,WP_Query默认使用"post_date"来排序
后来通过solagirl 知道wp4.0以后的版本已经支持多个排序字段了,但4.0以下版本不行,看来只能通过类似$wpdb这种方式来自己写Sql进行排序了
参考:
WordPress WP_Query方法
自定义WordPress查询的4种方法
A more powerful ORDER BY in WordPress 4.0
woocommerce Docs Sorting Products by Custom Meta Fields
来自为知笔记(Wiz)
WordPress版本:3.8
Woocommerce版本:2.0.20
如果没有指定排序规则(指定的字段),则Woocommerce默认使用的是"post_title"来排序的,但我在调用分类下的产品时使用"ID"字段来自定义排序规则,但实际上却并未按照自定义的规则来排序,而是使用”ORDER BY menu_order,post_title ASC“来排序(在product_category方法里没有对ID进行排序处理)
在Woocommerce插件帮助里找到了自定义规则但还是没有解决
在Google上搜索了半天也没有找到解决办法,于是转而去看源码解决,于是在\wp-content\plugins\woocommerce\classes\class-wc-shortcodes.php里找到product_category方法的定义并输出排序信息
前台生成的Sql语句
在前台发现输出的排序规则跟我自定义的规则并不一样,接着继续查看\wp-content\plugins\woocommerce\classes\class-wc-query.php里的get_catalog_ordering_args方法
原来get_catalog_ordering_args方法在对排序时又进行了处理,所以不符合以上规则的该方法会重新设置排序规则,还好该方法提供了一个"woocommerce_get_catalog_ordering_args"filter
于是在funciton里重新定义"woocommerce_get_catalog_ordering_args"并返回我自定义的排序规则总算可以按照ID来排序了,将下面的代码添加到主题的function里
add_filter( 'woocommerce_get_catalog_ordering_args', 'htl_woocommerce_get_catalog_ordering_args' ); /** * htl add 2014-10-28 * 自定义分类下的产品排序规则 * 该规则将会重置product_category方法里的排序字段 * @param [type] $args [排序数组] * @return [type] [description] */ function htl_woocommerce_get_catalog_ordering_args( $args ) { $args['orderby'] = 'ID'; //echo "<br>"; //printer_r($args); return $args; }
下面是前台页面打印的Sql语句
至此就解决Woocommerce默认使用ID来排序分类下的产品,但有一个问题是我如果按照"menu_order"先降序然后再按照ID来降序这种通过多个字段来进行排序的话好像不行
在WordPress->WP_Query类里好像不能按照多个字段来排序(Woocommerce最后是调用WP_Query来获取数据的),如果出现多个排序字段,WP_Query默认使用"post_date"来排序
后来通过solagirl 知道wp4.0以后的版本已经支持多个排序字段了,但4.0以下版本不行,看来只能通过类似$wpdb这种方式来自己写Sql进行排序了
参考:
WordPress WP_Query方法
自定义WordPress查询的4种方法
A more powerful ORDER BY in WordPress 4.0
woocommerce Docs Sorting Products by Custom Meta Fields
来自为知笔记(Wiz)
相关文章推荐
- 如何在DataGrid前加一个列让其id按顺序排列,而非绑定的id字段的乱七八糟的排序???
- 常用的文章系统,如何用一条sql语句提取出每个分类的第一条并按OrderCol字段排序。分类大概几十个,一共只要取top 10 这样
- List中的数据如何根据对象的某一个或多个字段排序引出Comparable和comparator的使用
- Spark Mllib里使用贝氏二元分类时如何将数值特征字段用StandardScaler进行标准化(图文详解)
- 菜单分类多维数组中.每个数组添加一个id字段.可使用引用
- MongoDB中如何不使用_id作为主键?曲线救国?
- J2SE基础夯实系列之List中的数据如何根据对象的某一个或多个字段排序引出Comparable和comparator的使用
- magento -- 如何修改产品列表默认排序
- 如何修改MySQL的默认ID号排序? [
- 获得当前分类ID,产品详细信息页面得到当前产品默认商店的的商品名称
- CentOS 7.0如何将iptables作为防火墙(默认使用的是firewall作为防火墙)
- 关于读《作为产品经理,如何给用户需求排序?》感受
- J2SE基础夯实系列之List中的数据如何根据对象的某一个或多个字段排序引出Comparable和comparator的使用
- MongoDB使用ObjectId作为_id字段值,简述ObjectId构造
- 产品分类页面得到当前分类ID,产品详细信息页面得到当前产品默认商店的的商品名称 ---NAME
- 转自:http://m.blog.csdn.net/article/details?id=6554168 在使用order by语句进行查询结果排序时,不同的数据库对于被排序字段数据行为null的情况
- 常用的文章系统,如何用一条sql语句提取出每个分类的第一条并按OrderCol字段排序。分类大概几十个,一共只要取top 10 这样
- J2SE基础夯实系列之List中的数据如何根据对象的某一个或多个字段排序引出Comparable和comparator的使用-- Collections与Arrays
- ADO.NET 2.0 - 如何使用 DataView 来排序数据
- Discuz!使用技巧:如何隐藏论坛分类的名称?