提问者:小点点

woocommerce中的自定义订单筛选产品


我有一个网站,有100页的产品,我想按一个元值排序,我有,不是所有的产品都会有。所以我做了我的自定义排序通过覆盖默认的wooCommerce一个与woocommerce_get_catalog_ordering_args(链接)像这样:

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\u something,然后通过所有产品都具有的某种价值,例如price或其他东西,但这并不一定是最好的主意,我也不知道如何做到这一点。

我只希望填写有此值的产品,由上面订购,然后显示所有其他产品。其他产品的顺序并不重要。但现在的结果是,它只展示了有价值的产品。它过滤而不是基本上排序。我怎么能做到这一点?我见过这个:https://developer.wordpress.org/reference/classes/wp_query/#order-orderby-parameters但是我真的不知道如何把它应用到我的订购中。

编辑:我试过@johannes的答案,当我var\u dump($args)时我得到:

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

我不明白为什么这行不通。


共1个答案

匿名用户

如果您的自定义字段未如文档中所述出现,则可以使用回退排序字段:

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_值下单,然后,如果产品不存在此值,则按none下单。