6

显示按“价格”自定义字段排序的“产品”类型的帖子:

$query = new WP_Query( 
                      array ( 'post_type' => 'product', 
                              'orderby' => 'meta_value', 
                              'meta_key' => 'price' ) 
                     );

如果还想按“尺寸”订购,我应该使用哪个代码?

我需要对自定义字段进行多重排序的另一个示例:

显示具有“事件”类型的帖子,按“Start_Hour”排序,然后按“Start_Minute”排序。

4

4 回答 4

7

感谢Bainternet,我找到了解决方案:

function orderbyreplace($orderby) {
    return str_replace('menu_order', 'mt1.meta_value, mt2.meta_value', $orderby);
}

和...

$args = array(
  'post_type'=>'Events',
  'orderby' => 'menu_order',
  'order' => 'ASC',
  'meta_query' => array(
        array(
            'key' => 'Start_Hour',
            'value' => '',
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'Start_Minute',
            'value' => '',
            'compare' => 'LIKE'
        )
    )
);

add_filter('posts_orderby','orderbyreplace');
$loop = new WP_Query( $args );
remove_filter('posts_orderby','orderbyreplace');
于 2012-10-07T20:36:14.917 回答
2

我认为这在 Wordpress 3.7 中略有改变。

我不得不改变

return str_replace('menu_order', 'mt2.meta_value, mt1.meta_value', $orderby);

进入

return str_replace('wp_posts.menu_order', 'mt2.meta_value, mt1.meta_value', $orderby);

感谢您的初步解决方案![已编辑]

于 2013-11-24T23:46:28.963 回答
1

这是一个使用多个 meta_key 和 orderby 的示例,我认为它们应该可以工作:

$params = array(
'post_type' => 'product',
'meta_query' => array(
    array(
            'key' => 'price',
            'value' => '',
            'compare' => 'LIKE'
    ),
    array(
            'key' => 'size',
            'value' => '',
            'compare' => 'LIKE'
    )
),
'orderby' => 'price size',
'order' => 'ASC'
);
$query = new WP_Query;
$resulting_obj = $query->query($params);

您需要更多地使用 meta_query 项目,尤其是 'value' 参数。请仔细查看“自定义字段参数”部分中的http://codex.wordpress.org/Class_Reference/WP_Query 。

于 2012-10-02T09:49:03.023 回答
-1

如果您的自定义字段之一是 meta_key 而另一个是表的普通列,则不需要任何过滤器或挂钩来对多个自定义字段进行排序,而不是在查询中使用这些参数/参数。

'meta_key' => 'KEY_NAME',
'orderby' => 'meta_value_num SECOND_COLUMN_NAME',
'order' => 'ASC' or 'order' => 'DESC'

这里的顺序meta_value_numSECOND_COLUMN_NAME问题,您可能会看到基于顺序的不同 2 结果。

于 2015-02-06T13:16:54.827 回答