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

Php woocommerce中的自定义订单筛选产品,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我有一个网站,有100页的产品,我想排序的元价值,我有一个不是所有的产品将有。因此,我通过使用woocommerce\u get\u catalog\u ordering\u args()覆盖默认的woocommerce进行自定义排序,如下所示: function custom_order($args) { $args ['orderby'] = 'meta_value none'; $args ['order'] = 'desc'; $args ['meta_key'] =

我有一个网站,有100页的产品,我想排序的元价值,我有一个不是所有的产品将有。因此,我通过使用
woocommerce\u get\u catalog\u ordering\u 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\u something
,然后通过所有产品都具有的某种价值,例如
price
或其他东西,但这并不一定是最好的主意,我也不知道如何做到这一点

我只想把这个值填好的产品,由上面的人订购,然后显示所有其他的产品。其他产品的顺序无关紧要。但现在的结果是,它只显示有价值的产品。它基本上是过滤而不是排序。我怎样才能做到这一点?我已经看到了这一点:但我真的不知道如何将其应用到我的订单中

编辑: 我试过@johannes的答案,当我
var_dump($args)我得到:

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

我不明白为什么这不起作用。

如果您的自定义字段没有出现在以下文件中,则可以使用备用排序字段:


我还没有机会测试它,但这应该建议WooCommerce首先按
meta_值下单,然后,如果某个产品不存在此值,则按
none下单
如果您的自定义字段不存在,则可以使用回退排序字段:


我还没有机会测试它,但这应该建议WooCommerce首先按
meta_值下单,然后,如果产品不存在此值,按
none下单

修改后是否需要返回
$args
数组,或者我错了?此外,您的代码中缺少函数的参数。@Johannes您是对的,我只是想包含解决问题所需的代码。您不需要在修改后返回
$args
数组吗?还是我错了?此外,您的代码中缺少函数的参数。@Johannes您是对的,我只是想包含解决问题所需的代码。这并没有改变我的结果。我复制了你的代码。您确定没有遗漏任何内容吗?很抱歉,我已经测试了几种可能的解决方案(例如,
meta\u query
),但没有一个显示所需的结果。这并没有改变我的结果。我复制了你的代码。您确定没有遗漏任何内容吗?很抱歉,我已经测试了几种可能的解决方案(例如,
meta\u query
),但没有一个显示出预期的结果。
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');