質問するログイン新規登録

回答編集履歴

1

追記

2019/01/30 03:49

投稿

CHERRY
CHERRY

スコア25234

answer CHANGED
@@ -1,3 +1,75 @@
1
1
  提示されている部分だけをみる限りでは、問題なさそうに感じます。
2
2
 
3
- どうしてもうまくいかないということであれば、[Query Monitor プラグイン](https://ja.wordpress.org/plugins/query-monitor/)をインストールして、実行された SQL 文を確認してみてください。
3
+ どうしてもうまくいかないということであれば、[Query Monitor プラグイン](https://ja.wordpress.org/plugins/query-monitor/)をインストールして、実行された SQL 文を確認してみてください。
4
+
5
+
6
+ ----
7
+
8
+ 見落とししていないか気になったので、実際に試してみました。
9
+
10
+ テンプレート home.php を下記の内容で作成。
11
+ ```PHP
12
+ <?php get_header(); ?>
13
+
14
+ <div class="wrap">
15
+ <div id="primary" class="content-area">
16
+ <main id="main" class="site-main" role="main">
17
+ <?php
18
+ $args = array(
19
+ 'orderby' => array(
20
+ 'score1' => 'DESC',
21
+ 'score2' => 'DESC',
22
+ ),
23
+ 'meta_query' => array(
24
+ 'relation' => 'AND',
25
+ 'score1' => array(
26
+ 'key' => 'score1',
27
+ 'type' => 'numeric',
28
+ ),
29
+ 'score2' => array(
30
+ 'key' => 'score2',
31
+ 'type' => 'numeric',
32
+ ),
33
+ ),
34
+ );
35
+ $the_query = new WP_Query( $args );
36
+ while ( $the_query->have_posts() ) : $the_query->the_post();
37
+ echo "<div>";
38
+ echo $post->ID ."<br>";
39
+ the_title('<p>', '</p>');
40
+ echo "<p>". get_field('score1') ." - ". get_field('score2') ."</p>";
41
+ echo "</div>";
42
+ endwhile;
43
+ ?>
44
+ </main><!-- #main -->
45
+ </div><!-- #primary -->
46
+ </div><!-- .wrap -->
47
+
48
+ <?php get_footer(); ?>
49
+ ```
50
+ を作成して ACF で、score1, score2 のカスタムフィールドを作成して、0 - 100 で、適当な値を入れて実行してみました。
51
+
52
+ 表示された結果は、score1 の降順, score2 の降順に並んでいました。
53
+
54
+ また、Query Monitor プラグインで、実行された SQLクエリをみてみると
55
+ ```SQL
56
+ SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
57
+ FROM wp_posts
58
+ INNER JOIN wp_postmeta
59
+ ON ( wp_posts.ID = wp_postmeta.post_id )
60
+ INNER JOIN wp_postmeta AS mt1
61
+ ON ( wp_posts.ID = mt1.post_id )
62
+ WHERE 1=1
63
+ AND ( wp_postmeta.meta_key = 'score1'
64
+ AND mt1.meta_key = 'score2' )
65
+ AND wp_posts.post_type = 'post'
66
+ AND (wp_posts.post_status = 'publish'
67
+ OR wp_posts.post_status = 'acf-disabled'
68
+ OR wp_posts.post_status = 'private')
69
+ GROUP BY wp_posts.ID
70
+ ORDER BY CAST(wp_postmeta.meta_value AS SIGNED) DESC, CAST(mt1.meta_value AS SIGNED) DESC
71
+ LIMIT 0, 20
72
+ ```
73
+ となっていて、SQLクエリからも問題なさそうです。
74
+
75
+ もし、$args に他のパラメータが入っているのであれば、一度 質問に記載された内容だけにして試してみたらどうでしょうか?