Wordpress中的主要和次要排序

时间:2012-11-16 00:22:07

标签: arrays wordpress sorting

我正在创建一个Wordpress主题,对相册进行编目,我创建了自定义帖子类型,创建了自定义字段,并让他们成功拉入。我有几个自定义字段,包括;艺术家,专辑,大小,标签等。我目前按照艺术家名称的字母顺序排序这个数组:

  

的$ args =阵列(
    'post_type'=> '相册',
    'order'=> 'ASC',
    'meta_key'=> 'custom_meta_artist',
    'orderby'=> 'meta_value',
    'posts_per_page'=> -1,
  );

但我也希望相册'custom_meta_album'按字母顺序排序,如果它是同一个艺术家。目前,如果用户输入同一艺术家的10张专辑,则该帖子将按艺术家名称正确按字母顺序排列,但相册没有订单。

有没有办法在Wordpress中进行某种二级排序或主要和次要排序?我不知道这是一个IF声明,说“如果艺术家的价值相等,那么也会对专辑进行升序”或类似的话。我认为需要有一些方法告诉Wordpress它应该首先排序哪个字段然后继续到第二级。

1 个答案:

答案 0 :(得分:0)

你可以试试这个,希望这会有用

// keep this function in your functions.php
function myCustomOrderby($orderby) {
    return str_replace('menu_order', 'mt1.meta_value, mt2.meta_value', $orderby);
}

这是你的args数组

$args=array(
    'post_type' => 'albums',
    'orderby' => 'title',
    'order' => 'ASC',
    'posts_per_page' => -1,
    'meta_query' => array(
         array(
            'key' => 'custom_meta_artist',
            'value' => '',
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'custom_meta_album',
            'value' => '',
            'compare' => 'LIKE'
        )
    )
);
add_filter('posts_orderby','myCustomOrderby'); // Add filter before you call the WP_Query
$albums = new WP_Query($args);
remove_filter('posts_orderby','myCustomOrderby'); // Remove filter after you call the WP_Query
// Start your loop
while ( $albums->have_posts() ) : $albums->the_post();
    //...
endwhile;