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 である種の第 2 レベルの並べ替えまたは第 1 および第 2 の並べ替えを行う方法はありますか? 「アーティストの価値が等しい場合、アルバムも昇順で並べ替える」というIFステートメントなのか、それともそのような線に沿ったものなのかはわかりません。最初にどのフィールドでソートし、次に第 2 レベルに進むべきかを 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 に答える