Woocommerce 分类下的产品如何使用ID号来作为默认排序字段

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

自定义WordPress查询的4种方法

A more powerful ORDER BY in WordPress 4.0

woocommerce Docs Sorting Products by Custom Meta Fields

来自为知笔记(Wiz)

时间: 2024-08-02 16:28:17

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

易企cms获取分类下的指定个数产品方法

易企cms默认版本能获取指定分类的所有产品,但是不能获取指定的个数,为了能够获取指定的个数,我找到了GetProductList方法进行了改进: 1.找到根目录下的include/product.class.php文件搜索关键字"GetProductList"将GetProductList方法替换为如下代码, function GetProductList($cid,$skip=0,$take=10,$orderby="adddate desc",$all=fals

ecshop商品列表页,循环显示当前分类的二级分类以及分类下的商品

1.includes\lib_goods.php,在最末尾添加几个function /** * 获得指定分类下的子分类 * * @access public * @param integer $cat_id 分类编号 * @return array */ function get_children_tree($cat_id) { if ($cat_id >0 ) { $sql = 'SELECT count(*) FROM ' . $GLOBALS['ecs']->table('categor

ectouch手机商城首页调用指定分类下的商品

ECTouch是国内市面上唯一开源的ECSHOP移动商城系统,为广大电商以最低的成本快速搭建移动商城.最近最一商城实例,手机版首页需要调用指定分类下的商品,ECtouch商城默认好像没有此调用方式,只能自己动手添加了. 方法如下: 1.打开mobile\include\apps\default\model\IndexModel.class.php 在最下面 } 之前添加以下代码 /**      * 获得指定分类下的商品      */      function assign_cat_good

如何修改magento分类页面的产品的显示个数

经常的有客户问,怎么修改分类页面的产品的个数 这个是magneto后台操作的设置问题 打开后台,在英文状态下: system-->configuration 进入后,点击catalog Products per Page on Grid Allowed Values.这个就是在gird方式下,显示的个数的分列值,每个值用逗号隔开. Products per Page on Grid Default Value这个是在grid方式下默认的个数,这个值必须是上面填写的值其中的一个,否则会报错! OK

wordpress搜索某分类下的文章

<!-- 搜索某分类下的文章 value="5" 为搜索id值为5的分类--> <form action="<?php bloginfo('home'); ?>" method="get"> <div> <input type="text" value="<?php echo wp_specialchars($s, 1); ?>" name=

ThinkCMF(二):多个分类下的文章显示并分页;

一.查找多个分类下的文章放在一个页面显示并分类where:id in(1,2,3); <php> $posts=sp_sql_posts_paged('field:post_title,post_date,object_id,term_id;order:post_date desc;where:term_id in(1,2,3)'); </php> <foreach name="posts['posts']" item="v">

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

在wordpress程序根目录下新建一个php文件,粘贴下面的代码 如下面的代码注释,修改$CID这个分类id,就可以获取这个分类下的文章了.这个查询需要联合三个表wp_posts.wp_term_relationships.wp_term_taxonomy, 根据term_taxonomy_id获取文章标号,post_status = ‘publish’ 是指文章已经发布,post_type=’post’ 是指记录类型是文章,taxonomy = ‘category’ 是指类型是目录. 然后运

ecshop 首页调用指定分类下的销售排行

/*首页调用指定分类下的销售排行*/ function get_cats_top10($cat = '') { $sql = 'SELECT cat_id, cat_name ' . 'FROM ' . $GLOBALS['ecs']->table('category') . "WHERE parent_id = '$cat' ORDER BY sort_order ASC, cat_id ASC LIMIT 3"; $res = $GLOBALS['db']->getAl

获取多级类别组合下的产品

本篇是针对我在做项目过程中遇到的特定需求而做的一个Demo, 没有很大的通用性,读者酌情可绕行. 标题不能完全表达本意,确切的情景需要展开说.假设有三级分类,关于分类这样设计: public class Category { public int Id { get; set; } public string Name { get; set; } public int ParentId { get; set; } } 然后产品可以属于多个分类,以下的Categories属性值是以英文逗号隔开.由分