WooCommerce如何按last modified最后修改日期对商品进行排序
你之前直接传orderby=modified不生效,是因为WooCommerce默认自定义了商品查询的排序规则,不会直接识别WordPress原生的modified排序参数,以下是可行的解决方法:
- 方法1:添加自定义代码启用按修改日期排序
将以下代码添加到当前使用主题的functions.php文件,或者自定义功能插件的代码文件中:
// 注册modified作为合法的商品排序参数 add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_enable_modified_orderby' ); function custom_enable_modified_orderby( $args ) { if ( isset( $_GET['orderby'] ) && 'modified' === $_GET['orderby'] ) { $args['orderby'] = 'modified'; $args['order'] = 'DESC'; // 最新修改的排最前面,要反过来就改成ASC } return $args; } // 可选:把按修改日期排序的选项添加到前台排序下拉框 add_filter( 'woocommerce_catalog_orderby', 'custom_add_modified_orderby_option' ); function custom_add_modified_orderby_option( $options ) { $options['modified'] = '最近更新优先'; return $options; }
添加后再访问https://snake.cl/shop/?orderby=modified即可生效,更新商品库存属于修改商品操作,调整后对应商品会自动排到列表前列。
- 方法2:结合现货/新品状态做更高优先级排序
如果要让标记为新品、或者有现货的商品比仅修改过的商品排序更高,可以调整查询参数新增多条件排序规则,示例代码如下:
add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_stock_new_priority_orderby' ); function custom_stock_new_priority_orderby( $args ) { if ( isset( $_GET['orderby'] ) && 'modified' === $_GET['orderby'] ) { $args['meta_query'] = array( 'relation' => 'AND', 'stock_clause' => array( 'key' => '_stock_status', 'value' => 'instock', 'compare' => '=', ), 'new_clause' => array( 'key' => '_is_new', // 如果你没有用自定义字段标记新品可以删掉这段 'compare' => 'EXISTS', ) ); $args['orderby'] = array( 'stock_clause' => 'DESC', 'new_clause' => 'DESC', 'modified' => 'DESC' ); } return $args; }
按照上面的配置后,排序优先级为:现货商品 → 标记为新品的商品 → 最后修改日期最新的商品,可匹配你的需求。
内容的提问来源于stack exchange,提问作者Mikebb
相关产品推荐
相关产品推荐

