WordPress订购的两个自定义字段meta_key的
问题描述:
我有一个工作与一个meta_key('countdown_date
'或'hour
')的Woocomerce查询。WordPress订购的两个自定义字段meta_key的
它通过自定义排序产品'meta_key' => 'countdown_date'
或'hour'
和orders them using 'orderby' => 'meta_value_num'
。
我需要将两个meta_key's
加在一起。 ('小时'键只返回24hr
时间的前两个整数)。
结果所需,产品由两个自定义字段countdown_date和小时
$args = array(
'posts_per_page' => 20,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'live-events'
)),
'post_type' => 'product',
'meta_key' => 'countdown_date',
// need to add second meta key here 'meta_key' => 'hour',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
$the_query = new WP_Query($args);
我看的没有结果类似的问题负载排序。
两个循环似乎矫枉过正,添加meta_query对我来说不起作用。
任何帮助将是伟大的。 :)从@Rene_Korss
下面的答案
全部工作的代码我能拿到手将它添加到functions.php中,以便存档会方式与自定义循环相同的排序。
下面是我工作的功能的简化版本。我也需要在这里添加两个meta_key。
add_filter('woocommerce_get_catalog_ordering_args','wdm_change_ordering',10,1);
function wdm_change_ordering($args) {
if(is_product_category()) {
$args['meta_key'] = 'countdown_date';
// need to add second meta key here $args['meta_key'] = 'hour',
$args['orderby'] = 'meta_value';
$args['order'] = 'ASC';
}
return $args;
}
答
两元的键添加到meta_query
并设置orderby
到meta_value
。然后你可以用posts_orderby
挂钩替换它。
<?php
// Override orderby if orderby value = 'meta_value'
function orderby_countdown_date_and_hour($orderby){
return str_replace('meta_value', 'meta_value, mt1.meta_value', $orderby);
}
$args = array(
'post_type' => 'product',
'posts_per_page' => 20,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'live-events'
)
),
'meta_query' => array(
array(
'key' => 'countdown_date',
'value' => '',
'compare' => '!='
),
array(
'key' => 'hour',
'value' => '',
'compare' => '!='
)
),
'orderby' => 'meta_value',
'order' => 'ASC'
);
// Replace orderby
add_filter('posts_orderby', 'orderby_countdown_date_and_hour');
// Query
$the_query = new WP_Query($args);
// Remove our orderby
remove_filter('posts_orderby', 'orderby_countdown_date_and_hour');
这导致
ORDER BY dbprefix_postmeta.meta_value, mt1.meta_value ASC
这意味着
ORDER BY countdown_date, hour ASC
嘿刘若英,感谢这一个你的帮助。 如果您感兴趣的网址是:http://epicentre.tv –
我已经将函数和过滤器添加到了functions.php文件中。更新了$ args。 结果与刚订购但countdown_date一样。 不知道从哪里来。你的方法看起来很棒,只是不明白为什么它没有花时间。小时剂量作为一个单一的元键。 –
@ Frithir.com事实证明,您不允许设置客户'orderby',请参阅[WP订单和订单参数](https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters)。另外,'postmeta'表被命名有点不同。抱歉混淆。我编辑了我的答案。 –