我有一个网站,该网站包含100页的产品,我要按一个元值进行排序,但并不是所有产品都具有该元值。因此,我通过使用woocommerce_get_catalog_ordering_args
(link)覆盖默认的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"
}
我不知道为什么这行不通。
答案 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
订购。