提示されている部分だけをみる限りでは、問題なさそうに感じます。
どうしてもうまくいかないということであれば、Query Monitor プラグインをインストールして、実行された SQL 文を確認してみてください。
見落とししていないか気になったので、実際に試してみました。
テンプレート home.php を下記の内容で作成。
PHP
1<?php get_header(); ?>
2
3<div class="wrap">
4 <div id="primary" class="content-area">
5 <main id="main" class="site-main" role="main">
6<?php
7$args = array(
8 'orderby' => array(
9 'score1' => 'DESC',
10 'score2' => 'DESC',
11 ),
12 'meta_query' => array(
13 'relation' => 'AND',
14 'score1' => array(
15 'key' => 'score1',
16 'type' => 'numeric',
17 ),
18 'score2' => array(
19 'key' => 'score2',
20 'type' => 'numeric',
21 ),
22 ),
23);
24$the_query = new WP_Query( $args );
25while ( $the_query->have_posts() ) : $the_query->the_post();
26 echo "<div>";
27 echo $post->ID ."<br>";
28 the_title('<p>', '</p>');
29 echo "<p>". get_field('score1') ." - ". get_field('score2') ."</p>";
30 echo "</div>";
31endwhile;
32?>
33 </main><!-- #main -->
34 </div><!-- #primary -->
35</div><!-- .wrap -->
36
37<?php get_footer(); ?>
を作成して ACF で、score1, score2 のカスタムフィールドを作成して、0 - 100 で、適当な値を入れて実行してみました。
表示された結果は、score1 の降順, score2 の降順に並んでいました。
また、Query Monitor プラグインで、実行された SQLクエリをみてみると
SQL
1SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
2FROM wp_posts
3INNER JOIN wp_postmeta
4 ON ( wp_posts.ID = wp_postmeta.post_id )
5INNER JOIN wp_postmeta AS mt1
6 ON ( wp_posts.ID = mt1.post_id )
7WHERE 1=1
8AND ( wp_postmeta.meta_key = 'score1'
9 AND mt1.meta_key = 'score2' )
10AND wp_posts.post_type = 'post'
11AND (wp_posts.post_status = 'publish'
12 OR wp_posts.post_status = 'acf-disabled'
13 OR wp_posts.post_status = 'private')
14GROUP BY wp_posts.ID
15ORDER BY CAST(wp_postmeta.meta_value AS SIGNED) DESC, CAST(mt1.meta_value AS SIGNED) DESC
16LIMIT 0, 20
となっていて、SQLクエリからも問題なさそうです。
もし、$args に他のパラメータが入っているのであれば、一度 質問に記載された内容だけにして試してみたらどうでしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。