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并设置orderbymeta_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 
+0

嘿刘若英,感谢这一个你的帮助。 如果您感兴趣的网址是:http://epicentre.tv –

+0

我已经将函数和过滤器添加到了functions.php文件中。更新了$ args。 结果与刚订购但countdown_date一样。 不知道从哪里来。你的方法看起来很棒,只是不明白为什么它没有花时间。小时剂量作为一个单一的元键。 –

+0

@ Frithir.com事实证明,您不允许设置客户'orderby',请参阅[WP订单和订单参数](https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters)。另外,'postmeta'表被命名有点不同。抱歉混淆。我编辑了我的答案。 –