WooCommerce如何添加按产品发布日期的自定义排序选项?
问题根因
你的代码有两处错误导致排序失效:
- 参数匹配错误:你添加前台排序选项时用的选项键是
publish_date,但在排序逻辑判断里写的是判断modified_date值,自定义排序分支完全不会触发。 - 排序字段名错误:WooCommerce产品是WordPress自定义文章类型,不存在
publish_date这个内置排序字段,产品发布日期对应的WP_Query排序参数为date,对应数据库wp_posts表的post_date字段,就是你在后台看到的产品发布时间。传入无效的orderby参数时,WordPress会自动回退到默认排序规则,也就是你遇到的按ID排序的情况。
可直接使用的正确代码
替换你原有代码即可生效:
add_filter( 'woocommerce_get_catalog_ordering_args', 'enable_catalog_ordering_by_publish_date' ); function enable_catalog_ordering_by_publish_date( $args ) { if ( isset( $_GET['orderby'] ) && 'publish_date' === wc_clean( $_GET['orderby'] ) ) { $args['orderby'] = 'date'; $args['order'] = 'DESC'; // 新发布产品在前,如需旧产品在前改为ASC } return $args; } add_filter( 'woocommerce_catalog_orderby', 'add_custom_sorting_options' ); function add_custom_sorting_options( $options ){ $options[ 'publish_date' ] = '按发布日期排序(新→旧)'; return $options; }
扩展说明
如果需要同时支持按发布日期从旧到新排序,新增一个对应选项即可,参考逻辑:
- 在
woocommerce_catalog_orderby过滤器里新增键为publish_date_asc的选项 - 在排序参数判断里新增对
publish_date_asc的判断,返回orderby为date、order为ASC的参数数组即可
内容的提问来源于stack exchange,提问作者cytsunny
相关产品推荐
相关产品推荐

