回答編集履歴

3

誤字訂正

2021/10/23 05:11

投稿

crazyBaseball
crazyBaseball

スコア21

test CHANGED
@@ -138,17 +138,11 @@
138
138
 
139
139
  ###試したコード2への返答
140
140
 
141
- JSはチェックしていませんでした。気が回らず申し訳ございません。以下2点ご修正ください。
142
-
143
141
 
144
142
 
145
143
  【1】
146
144
 
147
- まず「url」の値は「サイトURL/wp-admin/admin-ajax.php」です。
145
+ まず「url」の値は「サイトURL/wp-admin/admin-ajax.php」で、次のようにPHPから出力しておくのが一般的な方法です。functions.phpの最後に記述しておいてください。
148
-
149
- しかし次のようにPHPから出力しておくのが一般的な方法です。
150
-
151
- functions.phpの最後に記述しておいてください。
152
146
 
153
147
  ```PHP
154
148
 
@@ -158,7 +152,7 @@
158
152
 
159
153
  <script>
160
154
 
161
- var ajaxUrl = '<?php echo admin_url( 'admin-ajax.php'); ?>';
155
+ var ajaxUrl = '<?php echo admin_url('admin-ajax.php'); ?>';
162
156
 
163
157
  </script>
164
158
 
@@ -170,8 +164,6 @@
170
164
 
171
165
  ```
172
166
 
173
-
174
-
175
167
  【2】
176
168
 
177
169
  次に送信値にはアクション名(dk_get_case)を入れてください。
@@ -192,9 +184,9 @@
192
184
 
193
185
  data: {
194
186
 
195
- "url_category": url_category,
187
+ url_category: url_category,
196
-
188
+
197
- "action": "dk_get_case"
189
+ action: "dk_get_case"
198
190
 
199
191
  },
200
192
 
@@ -215,3 +207,7 @@
215
207
  });
216
208
 
217
209
  ```
210
+
211
+ 【3】
212
+
213
+ 最後に`dk_get_case`の最後は`die();`してください。

2

試したコード2への返答

2021/10/23 05:11

投稿

crazyBaseball
crazyBaseball

スコア21

test CHANGED
@@ -104,7 +104,7 @@
104
104
 
105
105
 
106
106
 
107
- ###試したことへの返答
107
+ ###試したコード1への返答
108
108
 
109
109
  失礼致しました。上記の(1)を下記のようにすれば実現できると思います。
110
110
 
@@ -133,3 +133,85 @@
133
133
  ```
134
134
 
135
135
  尚`$url`ですが、`get_posts`を通せば平気ですが、他のSQL生成で用いるのであれば[SQLインジェクション](https://www.shadan-kun.com/waf/sql_injection/)に注意し適切にエスケープしてください。
136
+
137
+
138
+
139
+ ###試したコード2への返答
140
+
141
+ JSはチェックしていませんでした。気が回らず申し訳ございません。以下2点ご修正ください。
142
+
143
+
144
+
145
+ 【1】
146
+
147
+ まず「url」の値は「サイトURL/wp-admin/admin-ajax.php」です。
148
+
149
+ しかし次のようにPHPから出力しておくのが一般的な方法です。
150
+
151
+ functions.phpの最後に記述しておいてください。
152
+
153
+ ```PHP
154
+
155
+ function add_my_ajaxurl() {
156
+
157
+ ?>
158
+
159
+ <script>
160
+
161
+ var ajaxUrl = '<?php echo admin_url( 'admin-ajax.php'); ?>';
162
+
163
+ </script>
164
+
165
+ <?php
166
+
167
+ }
168
+
169
+ add_action( 'wp_head', 'add_my_ajaxurl', 1 );
170
+
171
+ ```
172
+
173
+
174
+
175
+ 【2】
176
+
177
+ 次に送信値にはアクション名(dk_get_case)を入れてください。
178
+
179
+ あと一応errorとsucessは非推奨なので、failとdoneがいいと思います。
180
+
181
+ ```jQuery
182
+
183
+ jQuery(document).ready(function () {
184
+
185
+ var url_category = window.location.href;
186
+
187
+ $.ajax({
188
+
189
+ url: ajaxUrl, // 【1】によってPHPから出力されているものを使う
190
+
191
+ type: "POST",
192
+
193
+ data: {
194
+
195
+ "url_category": url_category,
196
+
197
+ "action": "dk_get_case"
198
+
199
+ },
200
+
201
+ }).done(function(responce) {
202
+
203
+ // 成功
204
+
205
+ }).fail(function(XMLHttpRequest, textStatus, errorThrown) {
206
+
207
+ // エラー
208
+
209
+ }).always(function() {
210
+
211
+ // donefailに関係なく実行したい処理
212
+
213
+ });
214
+
215
+ });
216
+
217
+ ```

1

「試したことへの返答」を追記

2021/10/23 05:07

投稿

crazyBaseball
crazyBaseball

スコア21

test CHANGED
@@ -1,3 +1,5 @@
1
+ ###最初の回答
2
+
1
3
  未検証ですが、
2
4
 
3
5
 
@@ -20,29 +22,41 @@
20
22
 
21
23
  ```php
22
24
 
25
+ add_action('wp_ajax_get_case', 'dk_get_case');
26
+
27
+ add_action('wp_ajax_nopriv_get_case', 'dk_get_case');
28
+
29
+ function dk_get_case() {
30
+
31
+ $headers['Access-Control-Allow-Origin'] = '*';
32
+
33
+ $return = ['status' => false, 'data' => [], 'message' => ''];
34
+
35
+
36
+
37
+ // (1)現在のURLを取得
38
+
39
+ $http = is_ssl() ? 'https' : 'http' . '://';
40
+
41
+ $url = $http . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
42
+
43
+
44
+
45
+ // (2)URLから'page1'などの文字列を取得
46
+
47
+ $keys = parse_url($url);
48
+
49
+ $path = explode("/", $keys['path']);
50
+
51
+ $terms = $path[2];
52
+
53
+
54
+
55
+ $case_clinics = [1,2,3,4];
56
+
23
57
  foreach($case_clinics as $key => $case_clinic){
24
58
 
25
59
 
26
-
27
- // (1)現在のURLを取得
28
-
29
- $http = is_ssl() ? 'https' : 'http' . '://';
30
-
31
- $url = $http . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
32
-
33
-
34
-
35
- // (2)URLから'page1'などの文字列を取得
36
-
37
- $keys = parse_url($url);
38
-
39
- $path = explode("/", $keys['path']);
40
-
41
- $terms = $path[2];
42
-
43
-
44
-
45
- // 元の処理
46
60
 
47
61
  $dk_posts = get_posts(
48
62
 
@@ -87,3 +101,35 @@
87
101
  // 以下略
88
102
 
89
103
  ```
104
+
105
+
106
+
107
+ ###試したことへの返答
108
+
109
+ 失礼致しました。上記の(1)を下記のようにすれば実現できると思います。
110
+
111
+ ```
112
+
113
+ add_action('wp_ajax_get_case', 'dk_get_case');
114
+
115
+ add_action('wp_ajax_nopriv_get_case', 'dk_get_case');
116
+
117
+ function dk_get_case() {
118
+
119
+ $headers['Access-Control-Allow-Origin'] = '*';
120
+
121
+ $return = ['status' => false, 'data' => [], 'message' => ''];
122
+
123
+
124
+
125
+ // (1)現在のURLを取得
126
+
127
+ $url = $_POST['url'];
128
+
129
+
130
+
131
+ // 以下略
132
+
133
+ ```
134
+
135
+ 尚`$url`ですが、`get_posts`を通せば平気ですが、他のSQL生成で用いるのであれば[SQLインジェクション](https://www.shadan-kun.com/waf/sql_injection/)に注意し適切にエスケープしてください。