在给一个客户开发网店系统时使用了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里
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方法
 
           

Woocommerce 分类下的产品如何使用ID号来作为默认排序字段的更多相关文章

  1. wordpress文章显示同一分类下的上一篇下一篇

    我们在用wordpress开发网站的时候会在文章页中引入上一篇下一篇,但是发现新闻页的上下文章有可能是产品分类的post,这个就不太合理,如何显示同一分类下的上一篇下一篇文章呢?随ytkah一起来看看 ...

  2. dedecms如何随机调用指定分类下的文章到网站首页

    dedecms是全静态的,有时会因为其他事情好几天没写文章推荐到首页,那样对se不是很友好.原本ytkah是想在网站首页上半部分调用几篇id从200到500的文章随机展示的,这样每次更新首页给se的赶 ...

  3. ECSHOP首页调用指定分类下的商品

    转:http://bbs.ecshop.com/thread-1123207-1-1.html 调用某个分类下的商品,方法有很多种的,不过都需要先在后台设置模板那里设置显示和显示条数, 然后在需要调用 ...

  4. ecshop首页调用指定分类的所有产品(指定一级调二级)

    第一种方法 第一 在/includes/lib_goods.php下增加如下代码,用过网上的直接换掉就可以 function index_get_cat_id_goods_best_list($cat ...

  5. ecshop首页调用某分类下的商品|assign_cat_goods()

    ecshop首页调用分类下的商品其实很简单,也有模板设置那里可以设置,不过那个只可以用cat_goods.lib,不方便,所以我想看看怎么能简单的实现ecshop首页调用分类下的商品 只需要在inde ...

  6. ecshop 商品分类页 取得当前分类下的子分类方法

    ecshop的商品分类页面category.php 下的分类,默认是取得所有同级父分类以及父类别的子分类.比如,我点击进入是A商品分类的页面 category.php?id=1,事实上 我只需要取得父 ...

  7. php无限分类 下拉框

    无限分类 下拉框优势:填写参数少,只需要指定一个循环节点($parnent_id),就可以循环所有下级分类.循环输出结构很有特色,比较符合我的口味.补充: $parent_id才是上下级关联的节点,i ...

  8. SQL SERVER 下:1、递归查询父分类下的各个子分类。 2、查询每个商品分类中最贵的前两个商品SQL

    1.递归查询父分类下的各个子分类.表设计: SQL: --CTE 语句(适用于MSSQL2005以后版本) with cte_testNavi(Id,Name,Pid ) as ( --这是查询语句 ...

  9. wordpress通过$wpdb获取一个分类下所有的文章

    在wordpress程序根目录下新建一个php文件,粘贴下面的代码 如下面的代码注释,修改$CID这个分类id,就可以获取这个分类下的文章了.这个查询需要联合三个表wp_posts.wp_term_r ...

随机推荐

  1. cinder 挂载卷和 iSCSI原理

    LVM名称介绍 PV:物理磁盘 VG:卷组,多个PV可以组成一个VG,一个VG可以划分成多个LV(逻辑卷). PP:物理区块,将一个VG逻辑的划分成连续的小块. LP:逻辑区块,若干个PP组成一个LP ...

  2. ESXI 5.5卡在LSI_MR3.V00

    方法一 故障现象 此问题无论使用VMware官方镜像还是HP的自定义镜像都会出现一下情况并卡着不动.(此文档普遍存在各种服务器上,包括其它厂商服务器) 故障原因: 故障原因VMware官方和HP官方并 ...

  3. 【BZOJ 3561】 3561: DZY Loves Math VI (莫比乌斯,均摊log)

    3561: DZY Loves Math VI Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 205  Solved: 141 Description ...

  4. WNDR4300v2 固件编译

    WNDR4300v2 固件编译 1.从官网下载源码   从官网找到 https://kb.netgear.com/2649/NETGEAR-Open-Source-Code-for-Programme ...

  5. Yii单元测试 codeception-Fixture的使用

    Fixture 本文主要是介绍关于Fixture,Specify的使用和遇到的坑 部分是根据源码摸索,有差错的部分望指出 Fixture主要是用来提供测试环境下的数据特定的状态 例如:测试中需要一条待 ...

  6. HttpURLConnection与 HttpClient 区别/性能测试对比

    HttpClient是个开源框架,封装了访问http的请求头,参数,内容体,响应等等, HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便 HttpClient实 ...

  7. Apache Thrift使用简介

    Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.和其它RPC框架相比,它主要具有如下连个特点: 高性能. 它采用的是二进制序列化,并且用的是长 ...

  8. 在雇员表中查找第二高的工资SQL语句助记

            "在雇员表中查找第二高的工资的员工记录"SQL语句怎么写         这个查询首先查找最高工资,然后将它从列表中排除.再查找最高工资. 非常明显,第二次返回的是 ...

  9. HelloWorld 和相关设置

    写这篇文章的初衷很简单,就是想再一次证明 IntelliJ IDEA 对于 Java 开发人员来说,确实比 eclipse 要好用得多,鉴于目前市面上关于 IntelliJ IDEA 的教程比较少,叙 ...

  10. sqlserver获取所有表和表字段

    SELECT [number]=a.colorder, [column] =a.name, [datatype]=b.name, [length]=COLUMNPROPERTY(a.id,a.name ...