在给一个客户开发网店系统时使用了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. 洛谷P3066 [USACO12DEC] 逃跑的Barn [左偏树]

    题目传送门 逃跑的Barn 题目描述 It's milking time at Farmer John's farm, but the cows have all run away! Farmer J ...

  2. BASE64Decoder BASE64Encoder jar包问题

    操作 对项目右击--->build path--->configure build path---> 选中默认jre OK,操作完毕, import sun.misc.BASE64D ...

  3. socket的使用一

    socket概念 socket层 理解socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协 ...

  4. getattr(sys.modules[__name__], func_name)

    有时我们需要将一个文件的信息(类.函数及变量)保存到文件,我们不能直接保存函数对象,而是将其转化为fn.__name__,问题来了,当我们想通过读取文件的形式重新配置这些类.函数时,该如何把这些字符串 ...

  5. BZOJ1030 [JSOI2007]文本生成器(AC自动机)

    做到了AC自动机的题目,复习了一下AC自动机,学习了黄学长代码,这个题呢,我们可以模拟在AC自动机上的操作,dp数组f[i][j]表示前i个字符,我们在AC自动机上处在j号节点的方案数. 我们可以计算 ...

  6. loj115 无源汇有上下界可行流

    link 题意&题解 code: #include<bits/stdc++.h> #define rep(i,x,y) for (int i=(x);i<=(y);i++) ...

  7. Java获取Access数据库连接单例简单实例

    Java在连接Access数据库时比较方便,不用导入第三方的jar包,jdk中内置的odbc可以完成Access数据库的访问,需要注意的是,我们首先要配置Access数据库的数据源,还要区分x86和x ...

  8. PAT甲级1107. Social Clusters

    PAT甲级1107. Social Clusters 题意: 当在社交网络上注册时,您总是被要求指定您的爱好,以便找到一些具有相同兴趣的潜在朋友.一个"社会群体"是一群拥有一些共同 ...

  9. PHP 基础函数(四)回调函数

    array_walk($arr,'function','words');  使用用户函数对数组中的每个成员进行处理(第三个参数传递给回调函数function)

  10. 给WebAPI的REST接口添加测试页面(二)

    在上篇文章中,我对Swagger-UI的基本功能进行了一些介绍,今天在这里介绍一下如何在WebAPI中集成Swagger-UI.这里以一个简单的CRUD的REST服务为例. /// <summa ...