woocommerce中的自定义订单可以过滤产品

时间:2020-03-31 12:56:04

标签: php wordpress woocommerce

我有一个网站,该网站包含100页的产品,我要按一个元值进行排序,但并不是所有产品都具有该元值。因此,我通过使用woocommerce_get_catalog_ordering_argslink)覆盖默认的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"
}

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

1 个答案:

答案 0 :(得分:0)

如果您的自定义字段不符合documentation中的规定,则可以使用后备排序字段:

@Bean
    public FlowBuilderServices flowBuilderServices() {
        return getFlowBuilderServicesBuilder()
                .setViewFactoryCreator(mvcViewFactoryCreator())
                .setValidator(validator())
                .setDevelopmentMode(true)
                .setConversionService(?)
                .build();
    }

我还没有机会进行测试,但这应该建议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'); 首先订购,然后,如果产品不存在此值,则由meta_value订购。