首页 > 解决方案 > woocommerce中的自定义订单过滤产品

问题描述

我有一个包含 100 页产品的网站,我想按我拥有的元值进行排序,而并非所有产品都会有。因此,我通过使用woocommerce_get_catalog_ordering_args链接)覆盖默认的 woocommerce 来进行自定义排序,如下所示:

function custom_order($args) {
   $args ['orderby'] = 'meta_value none';
   $args ['order'] = 'desc';
   $args ['meta_key'] = 'custom_something';
   return $args;
}
add_filter('woocommerce_get_catalog_ordering_args', 'custom_order');

但由于大多数产品实际上没有那个价值,它不会对此进行排序。因此,添加此过滤器后,我最终只有 2 页。现在我考虑过可能以两种方式订购它。因此,首先custom_something,所有产品都具有某种价值,例如price或其他东西,但这似乎并不一定是最好的主意,我也无法弄清楚如何做到这一点。

我只想要填写这个值的产品,按上面的顺序订购,然后只显示所有其他产品。其他产品的顺序无关紧要。但是现在的结果是,它只显示了具有价值的产品。它基本上是过滤而不是排序。我怎么能做到这一点?我已经看到了:https ://developer.wordpress.org/reference/classes/wp_query/#order-orderby-parameters但我真的不知道如何将其应用于我的订购。

编辑: 我已经尝试了@johannes 的答案,当var_dump($args);我得到:

array(3) { 
["orderby"]=> string(15) "meta_value none"
["order"]=> string(4) "desc" 
["meta_key"]=> string(16) "custom_something"
}

我不知道为什么这行不通。

标签: phpwordpresswoocommerce

解决方案


如果您的自定义字段不存在,您可以使用备用排序字段,如文档中所述:

function custom_order($args) {
   $args['orderby'] = 'meta_value none';
   $args['order'] = 'desc';
   $args['meta_key'] = 'custom_something';
   return $args;
}
add_filter('woocommerce_get_catalog_ordering_args', 'custom_order');

我还没有机会对其进行测试,但这应该建议 WooCommerce 先按 订购,meta_value然后,如果产品不存在此值,请按 订购none


推荐阅读