我正在创建一个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它应该首先排序哪个字段然后继续到第二级。
答案 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;