回答編集履歴

1

追記

2019/01/30 03:49

投稿

CHERRY
CHERRY

スコア25171

test CHANGED
@@ -3,3 +3,147 @@
3
3
 
4
4
 
5
5
  どうしてもうまくいかないということであれば、[Query Monitor プラグイン](https://ja.wordpress.org/plugins/query-monitor/)をインストールして、実行された SQL 文を確認してみてください。
6
+
7
+
8
+
9
+
10
+
11
+ ----
12
+
13
+
14
+
15
+ 見落とししていないか気になったので、実際に試してみました。
16
+
17
+
18
+
19
+ テンプレート home.php を下記の内容で作成。
20
+
21
+ ```PHP
22
+
23
+ <?php get_header(); ?>
24
+
25
+
26
+
27
+ <div class="wrap">
28
+
29
+ <div id="primary" class="content-area">
30
+
31
+ <main id="main" class="site-main" role="main">
32
+
33
+ <?php
34
+
35
+ $args = array(
36
+
37
+ 'orderby' => array(
38
+
39
+ 'score1' => 'DESC',
40
+
41
+ 'score2' => 'DESC',
42
+
43
+ ),
44
+
45
+ 'meta_query' => array(
46
+
47
+ 'relation' => 'AND',
48
+
49
+ 'score1' => array(
50
+
51
+ 'key' => 'score1',
52
+
53
+ 'type' => 'numeric',
54
+
55
+ ),
56
+
57
+ 'score2' => array(
58
+
59
+ 'key' => 'score2',
60
+
61
+ 'type' => 'numeric',
62
+
63
+ ),
64
+
65
+ ),
66
+
67
+ );
68
+
69
+ $the_query = new WP_Query( $args );
70
+
71
+ while ( $the_query->have_posts() ) : $the_query->the_post();
72
+
73
+ echo "<div>";
74
+
75
+ echo $post->ID ."<br>";
76
+
77
+ the_title('<p>', '</p>');
78
+
79
+ echo "<p>". get_field('score1') ." - ". get_field('score2') ."</p>";
80
+
81
+ echo "</div>";
82
+
83
+ endwhile;
84
+
85
+ ?>
86
+
87
+ </main><!-- #main -->
88
+
89
+ </div><!-- #primary -->
90
+
91
+ </div><!-- .wrap -->
92
+
93
+
94
+
95
+ <?php get_footer(); ?>
96
+
97
+ ```
98
+
99
+ を作成して ACF で、score1, score2 のカスタムフィールドを作成して、0 - 100 で、適当な値を入れて実行してみました。
100
+
101
+
102
+
103
+ 表示された結果は、score1 の降順, score2 の降順に並んでいました。
104
+
105
+
106
+
107
+ また、Query Monitor プラグインで、実行された SQLクエリをみてみると
108
+
109
+ ```SQL
110
+
111
+ SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
112
+
113
+ FROM wp_posts
114
+
115
+ INNER JOIN wp_postmeta
116
+
117
+ ON ( wp_posts.ID = wp_postmeta.post_id )
118
+
119
+ INNER JOIN wp_postmeta AS mt1
120
+
121
+ ON ( wp_posts.ID = mt1.post_id )
122
+
123
+ WHERE 1=1
124
+
125
+ AND ( wp_postmeta.meta_key = 'score1'
126
+
127
+ AND mt1.meta_key = 'score2' )
128
+
129
+ AND wp_posts.post_type = 'post'
130
+
131
+ AND (wp_posts.post_status = 'publish'
132
+
133
+ OR wp_posts.post_status = 'acf-disabled'
134
+
135
+ OR wp_posts.post_status = 'private')
136
+
137
+ GROUP BY wp_posts.ID
138
+
139
+ ORDER BY CAST(wp_postmeta.meta_value AS SIGNED) DESC, CAST(mt1.meta_value AS SIGNED) DESC
140
+
141
+ LIMIT 0, 20
142
+
143
+ ```
144
+
145
+ となっていて、SQLクエリからも問題なさそうです。
146
+
147
+
148
+
149
+ もし、$args に他のパラメータが入っているのであれば、一度 質問に記載された内容だけにして試してみたらどうでしょうか?