2

我正在创建一个对专辑进行分类的 Wordpress 主题,并且我已经创建了自定义帖子类型,创建了自定义字段,并让它们成功拉入。我有几个自定义字段,包括:艺术家、专辑、大小、标签等。我目前使用此数组按艺术家姓名的字母顺序排序帖子:

$args=array(
'post_type' => 'albums',
'order' => 'ASC',
'meta_key' => 'custom_meta_artist',
'orderby' => 'meta_value',
'posts_per_page' => -1,
) ;

但我也希望专辑“custom_meta_album”如果是同一位艺术家,则按字母顺序排序。目前,如果用户输入同一艺术家的 10 张专辑,则帖子将按艺术家姓名的字母顺序正确排序,但专辑没有顺序。

有没有办法在 Wordpress 中进行某种二级排序或一级和二级排序?我不知道这是否是一个 IF 语句,上面写着“如果艺术家的价值相等,那么也对专辑进行升序排序”或类似的东西。我认为需要某种方式来告诉 Wordpress 它应该首先对哪个字段进行排序,然后继续到第二级。

4

1 回答 1

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;
于 2012-11-16T01:53:54.170 回答