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

質問編集履歴

6

追記2を追記

2020/08/14 14:12

投稿

ikemen
ikemen

スコア3

title CHANGED
File without changes
body CHANGED
@@ -109,7 +109,7 @@
109
109
  アドバイスお待ちしてます!
110
110
 
111
111
  ### 追記
112
- KazuhiroHatanoから【よりよい対策】として $_SERVER['REQUEST_URI'] でなく $GLOBALS['wp'] を試すようアドバイスを頂きました
112
+ KazuhiroHatanoから【よりよい対策】として $_SERVER['REQUEST_URI'] でなく $GLOBALS['wp'] を試すようアドバイスを頂きました
113
113
 
114
114
  さっそく「http://example.com/products/roomba/favorites/」の header.php にて以下試しました
115
115
 
@@ -316,5 +316,41 @@
316
316
  string(18) "http://example.com"
317
317
  </div>
318
318
 
319
+ ```
320
+ ### 追記2
321
+ KazuhiroHatano様へ
322
+ こちらは上記が「http://example.com」でも「http://example.com/products/roomba/favorites」でも出力されることを確認したコードになります
323
+ ```php
324
+ <div class="test">
325
+ <?php
326
+ /* header.phpに記載 */
319
327
 
328
+ // 上記の追記と同じものを$strに代入
329
+ $str = 'object(WP)#411 (9) {
330
+ /* 省略 */
331
+ }';
332
+
333
+ // 開いたページでの var_dump($GLOBALS['wp']) が $str と同じかどうかを確認
334
+ ob_start();
335
+ var_dump($GLOBALS['wp']);
336
+ $dump = rtrim(ob_get_contents());
337
+ ob_end_clean();
338
+
339
+ // $str が、var_dump($GLOBALS['wp']) であれば "$is_match is true" が echo される
340
+ $is_match = ($str === $dump);
341
+ echo '$is_match is ' . json_encode($is_match).PHP_EOL;
342
+
343
+ // home_urlを確認
344
+ var_dump(home_url()); // "string(18) "http://example.com"
345
+ ?>
346
+ </div>
347
+ ```
348
+ ↓結果
349
+
350
+ 「http://example.com」 で実行しても 「http://example.com/products/roomba/favorites」 で実行してもこちらの結果でした
351
+ ```
352
+ <div class="test">
353
+ $is_match is true
354
+ string(18) "http://example.com
355
+ </div>
320
356
  ```

5

誤字

2020/08/14 14:12

投稿

ikemen
ikemen

スコア3

title CHANGED
File without changes
body CHANGED
@@ -313,7 +313,7 @@
313
313
  bool(false)
314
314
  }
315
315
  var_dump(home_url());を実行しました
316
- string(28) "http://example.com"
316
+ string(18) "http://example.com"
317
317
  </div>
318
318
 
319
319
 

4

追記に追記

2020/08/14 05:42

投稿

ikemen
ikemen

スコア3

title CHANGED
File without changes
body CHANGED
@@ -111,12 +111,29 @@
111
111
  ### 追記
112
112
  KazuhiroHatanoから【よりよい対策】として $_SERVER['REQUEST_URI'] でなく $GLOBALS['wp'] を試すようアドバイスを頂きました
113
113
 
114
- さっそく「http://example.com/products/roomba/favorites/」の header.php に var_dump($GLOBALS['wp']); を書いた結果が以下です
114
+ さっそく「http://example.com/products/roomba/favorites/」の header.php に以下試しました
115
115
 
116
116
  productchild や userchild(わたしがリライトルールに加えたもの)が得られていますが、現在の $page_name がそのどちらかまではわかりません。また roombaや favorites の方は得らません。
117
117
  なので冒頭の define のような情報は得られないのでは、と思いました。
118
+
118
119
  ```PHP
120
+ <div class="test">
121
+ <?php
122
+ /* header.phpに記載 */
119
123
 
124
+ echo 'var_dump($GLOBALS["wp"]);を実行しました'.PHP_EOL;
125
+ var_dump($GLOBALS['wp']);
126
+
127
+ echo 'var_dump(home_url());を実行しました'.PHP_EOL;
128
+ var_dump(home_url());
129
+ ?>
130
+ </div>
131
+ ```
132
+
133
+ ↓出力
134
+ ```PHP
135
+ <div class="test">
136
+ var_dump($GLOBALS["wp"]);を実行しました
120
137
  object(WP)#411 (9) {
121
138
  ["public_query_vars"]=>
122
139
  array(51) {
@@ -295,5 +312,9 @@
295
312
  ["did_permalink"]=>
296
313
  bool(false)
297
314
  }
315
+ var_dump(home_url());を実行しました
316
+ string(28) "http://example.com"
317
+ </div>
298
318
 
319
+
299
320
  ```

3

追記しました

2020/08/14 05:40

投稿

ikemen
ikemen

スコア3

title CHANGED
File without changes
body CHANGED
@@ -31,8 +31,8 @@
31
31
  $page_name = $path_arr[1] ?? '';
32
32
 
33
33
  // ページ名 ( $page_name ) に応じて $data を取得する
34
- if( $page_name == 'search' ){
34
+ if( $page_name == 'products' ){
35
- $data = '検索ページの場合の値';
35
+ $data = 'productページの場合の値';
36
36
  }elseif( $page_name == '' ){
37
37
  $data = 'フロントページの場合の値';
38
38
  }
@@ -69,8 +69,8 @@
69
69
  ```php
70
70
 
71
71
  // ページ名 ( $page_name ) に応じて $data を取得する
72
- if( $page_name == 'search' ){
72
+ if( $page_name == 'products' ){
73
- $data = '検索ページの場合の値';
73
+ $data = 'productページの場合の値';
74
74
  }elseif( $page_name == '' ){
75
75
  $data = 'フロントページの場合の値';
76
76
  }
@@ -89,8 +89,8 @@
89
89
  $data = '';
90
90
 
91
91
  // ページ名 ( $page_name ) に応じて $data を取得する
92
- if( $page_name == 'search' ){
92
+ if( $page_name == 'products' ){
93
- $data = '検索ページの場合の値';
93
+ $data = 'productページの場合の値';
94
94
  }elseif( $page_name == '' ){
95
95
  $data = 'フロントページの場合の値';
96
96
  }
@@ -106,4 +106,194 @@
106
106
 
107
107
  WordPress入門者につきそもそも何か根本的に誤解していたりするかもしれませんので、お気づきのことがあれば遠慮なく仰ってください
108
108
 
109
- アドバイスお待ちしてます!
109
+ アドバイスお待ちしてます!
110
+
111
+ ### 追記
112
+ KazuhiroHatanoから【よりよい対策】として $_SERVER['REQUEST_URI'] でなく $GLOBALS['wp'] を試すようアドバイスを頂きました
113
+
114
+ さっそく「http://example.com/products/roomba/favorites/」の header.php に var_dump($GLOBALS['wp']); を書いた結果が以下です
115
+
116
+ productchild や userchild(わたしがリライトルールに加えたもの)が得られていますが、現在の $page_name がそのどちらかまではわかりません。また roombaや favorites の方は得らません。
117
+ なので冒頭の define のような情報は得られないのでは、と思いました。
118
+ ```PHP
119
+
120
+ object(WP)#411 (9) {
121
+ ["public_query_vars"]=>
122
+ array(51) {
123
+ [0]=>
124
+ string(1) "m"
125
+ [1]=>
126
+ string(1) "p"
127
+ [2]=>
128
+ string(5) "posts"
129
+ [3]=>
130
+ string(1) "w"
131
+ [4]=>
132
+ string(3) "cat"
133
+ [5]=>
134
+ string(12) "withcomments"
135
+ [6]=>
136
+ string(15) "withoutcomments"
137
+ [7]=>
138
+ string(1) "s"
139
+ [8]=>
140
+ string(6) "search"
141
+ [9]=>
142
+ string(5) "exact"
143
+ [10]=>
144
+ string(8) "sentence"
145
+ [11]=>
146
+ string(8) "calendar"
147
+ [12]=>
148
+ string(4) "page"
149
+ [13]=>
150
+ string(5) "paged"
151
+ [14]=>
152
+ string(4) "more"
153
+ [15]=>
154
+ string(2) "tb"
155
+ [16]=>
156
+ string(2) "pb"
157
+ [17]=>
158
+ string(6) "author"
159
+ [18]=>
160
+ string(5) "order"
161
+ [19]=>
162
+ string(7) "orderby"
163
+ [20]=>
164
+ string(4) "year"
165
+ [21]=>
166
+ string(8) "monthnum"
167
+ [22]=>
168
+ string(3) "day"
169
+ [23]=>
170
+ string(4) "hour"
171
+ [24]=>
172
+ string(6) "minute"
173
+ [25]=>
174
+ string(6) "second"
175
+ [26]=>
176
+ string(4) "name"
177
+ [27]=>
178
+ string(13) "category_name"
179
+ [28]=>
180
+ string(3) "tag"
181
+ [29]=>
182
+ string(4) "feed"
183
+ [30]=>
184
+ string(11) "author_name"
185
+ [31]=>
186
+ string(8) "pagename"
187
+ [32]=>
188
+ string(7) "page_id"
189
+ [33]=>
190
+ string(5) "error"
191
+ [34]=>
192
+ string(10) "attachment"
193
+ [35]=>
194
+ string(13) "attachment_id"
195
+ [36]=>
196
+ string(7) "subpost"
197
+ [37]=>
198
+ string(10) "subpost_id"
199
+ [38]=>
200
+ string(7) "preview"
201
+ [39]=>
202
+ string(6) "robots"
203
+ [40]=>
204
+ string(7) "favicon"
205
+ [41]=>
206
+ string(8) "taxonomy"
207
+ [42]=>
208
+ string(4) "term"
209
+ [43]=>
210
+ string(5) "cpage"
211
+ [44]=>
212
+ string(9) "post_type"
213
+ [45]=>
214
+ string(5) "embed"
215
+ [46]=>
216
+ string(11) "post_format"
217
+ [47]=>
218
+ string(10) "rest_route"
219
+ [48]=>
220
+ string(10) "productchild"
221
+ [49]=>
222
+ string(8) "username"
223
+ [50]=>
224
+ string(9) "userchild"
225
+ }
226
+ ["private_query_vars"]=>
227
+ array(26) {
228
+ [0]=>
229
+ string(6) "offset"
230
+ [1]=>
231
+ string(14) "posts_per_page"
232
+ [2]=>
233
+ string(22) "posts_per_archive_page"
234
+ [3]=>
235
+ string(9) "showposts"
236
+ [4]=>
237
+ string(8) "nopaging"
238
+ [5]=>
239
+ string(9) "post_type"
240
+ [6]=>
241
+ string(11) "post_status"
242
+ [7]=>
243
+ string(12) "category__in"
244
+ [8]=>
245
+ string(16) "category__not_in"
246
+ [9]=>
247
+ string(13) "category__and"
248
+ [10]=>
249
+ string(7) "tag__in"
250
+ [11]=>
251
+ string(11) "tag__not_in"
252
+ [12]=>
253
+ string(8) "tag__and"
254
+ [13]=>
255
+ string(12) "tag_slug__in"
256
+ [14]=>
257
+ string(13) "tag_slug__and"
258
+ [15]=>
259
+ string(6) "tag_id"
260
+ [16]=>
261
+ string(14) "post_mime_type"
262
+ [17]=>
263
+ string(4) "perm"
264
+ [18]=>
265
+ string(17) "comments_per_page"
266
+ [19]=>
267
+ string(8) "post__in"
268
+ [20]=>
269
+ string(12) "post__not_in"
270
+ [21]=>
271
+ string(11) "post_parent"
272
+ [22]=>
273
+ string(15) "post_parent__in"
274
+ [23]=>
275
+ string(19) "post_parent__not_in"
276
+ [24]=>
277
+ string(5) "title"
278
+ [25]=>
279
+ string(6) "fields"
280
+ }
281
+ ["extra_query_vars"]=>
282
+ array(0) {
283
+ }
284
+ ["query_vars"]=>
285
+ array(0) {
286
+ }
287
+ ["query_string"]=>
288
+ string(0) ""
289
+ ["request"]=>
290
+ NULL
291
+ ["matched_rule"]=>
292
+ NULL
293
+ ["matched_query"]=>
294
+ NULL
295
+ ["did_permalink"]=>
296
+ bool(false)
297
+ }
298
+
299
+ ```

2

対策を追加

2020/08/13 03:14

投稿

ikemen
ikemen

スコア3

title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,8 @@
1
1
  ### 実現したいこと
2
2
 
3
- WordPressでアクセスされたURLを定数としてdefineしたいです
3
+ WordPressでアクセスされたURLを定数として define したいです
4
4
 
5
- その適切な方法を知りたいのですが、最後に記載した【対策1】と【対策2】はどちらにすべきでしょうか
5
+ その適切な方法を知りたいのですが、最後に記載した【対策1,2,3】はどにすべきでしょうか
6
6
  また【よりよい対策】もあれば教えて頂きたいです
7
7
 
8
8
  よろしくお願い致します!
@@ -10,7 +10,7 @@
10
10
 
11
11
  ###発生している問題
12
12
  アクセスされたURLを次のように define しました
13
- しかし wp_enqueue_scripts で扱おうとすると、最後の行で「$data が見つからないエラーになる!」のです
13
+ しかし getData で扱おうとすると、最後の行で「$data が見つからないエラーになる!」のです
14
14
  アクセスしたのはフロントページなので「フロントページの場合の値」がほしいのです
15
15
  ###該当のソースコード
16
16
  ```php
@@ -21,9 +21,8 @@
21
21
  // アクセスされた URL を定数にする
22
22
  define( 'URL', (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
23
23
 
24
- // JSにデータ
24
+ // $data 取得
25
- add_action( 'wp_enqueue_scripts', 'my_enqueue_main' );
26
- function my_enqueue_main(){
25
+ function getData(){
27
26
 
28
27
  // アクセスされた URL をもとにページ名 ( $page_name ) を取得する
29
28
  $parsed_url = parse_url( URL );
@@ -31,21 +30,20 @@
31
30
  $path_arr = explode( '/', $path );
32
31
  $page_name = $path_arr[1] ?? '';
33
32
 
34
- // ページ名 ( $page_name ) に応じてJSにデータ
33
+ // ページ名 ( $page_name ) に応じて $data 取得
35
34
  if( $page_name == 'search' ){
36
35
  $data = '検索ページの場合の値';
37
36
  }elseif( $page_name == '' ){
38
37
  $data = 'フロントページの場合の値';
39
38
  }
39
+
40
- wp_localize_script( 'data.js', 'data', $data ); // -> $data が見つからないエラーになる!
40
+ return $data; // -> $data が見つからないエラーになる!
41
41
  }
42
42
  ```
43
43
  ###試したこと
44
44
  エラーログで確認しましたら…、
45
45
  ```php
46
- // JSにデータを出す
47
- add_action( 'wp_enqueue_scripts', 'my_enqueue_main' );
48
- function my_enqueue_main(){
46
+ function getData(){
49
47
 
50
48
  // 値を確認
51
49
  error_log( '$_SERVER["REQUEST_URI"]の値 -> ' . $_SERVER["REQUEST_URI"] );
@@ -64,13 +62,13 @@
64
62
 
65
63
 
66
64
  ###考えた対策
67
- これを避けるために、次のつの対策を考えました
65
+ 次の3つの対策を考えました
68
66
 
69
- 【対策1】条件分岐に /undefined/ を追加する
67
+ 【対策1】条件分岐に /undefined/ を追加
70
- つまり上記コードの if 次のようにすることです
68
+ 上記コードの if 次のように追加する方法、場当たり的に思いま
71
- これはだいぶ場当たり的に思うのですがいかがでしょうか
72
69
  ```php
70
+
73
- // ページ名 ( $page_name ) に応じてJSにデータ
71
+ // ページ名 ( $page_name ) に応じて $data 取得
74
72
  if( $page_name == 'search' ){
75
73
  $data = '検索ページの場合の値';
76
74
  }elseif( $page_name == '' ){
@@ -82,14 +80,29 @@
82
80
  return;
83
81
  }
84
82
 
85
- wp_localize_script( 'data.js', 'data', $data );
83
+ return $data;
86
84
  ```
85
+ 【対策2】初めに宣言
86
+ ifに一致しなくとも空文字を返す方法です
87
+ ```PHP
88
+ // 初めに空文字で宣言しておく
89
+ $data = '';
90
+
91
+ // ページ名 ( $page_name ) に応じて $data を取得する
92
+ if( $page_name == 'search' ){
93
+ $data = '検索ページの場合の値';
94
+ }elseif( $page_name == '' ){
95
+ $data = 'フロントページの場合の値';
96
+ }
97
+
98
+ return $data;
99
+ ```
87
- 【対策2】定数を変更
100
+ 【対策3】定数を変更
88
- つまり undefined のときは空文字する方法で、個人的にはこの方がいいかと思っています
101
+ undefined のときは空文字を定数にする方法で、個人的にはこの方がいいかと思っています
89
102
  ```php
90
103
  define( 'URL', (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . ( $_SERVER['REQUEST_URI'] === '/undefined/' ? '' : $_SERVER['REQUEST_URI'] ) );
91
104
  ```
92
- この2つしか対策が浮かびませんでしたが、【よりよい対策】もあれば教えて頂きたいです
105
+ この3つしか対策が浮かびませんでしたが、【よりよい対策】もあれば教えて頂きたいです
93
106
 
94
107
  WordPress入門者につきそもそも何か根本的に誤解していたりするかもしれませんので、お気づきのことがあれば遠慮なく仰ってください
95
108
 

1

表記を修正

2020/08/12 08:57

投稿

ikemen
ikemen

スコア3

title CHANGED
File without changes
body CHANGED
@@ -77,12 +77,12 @@
77
77
  $data = 'フロントページの場合の値';
78
78
  }
79
79
 
80
- // undefined 用の if を追加
80
+ // /undefined/ 用の if を追加
81
- elseif( $page_name == 'undefined ' ){
81
+ elseif( $page_name == '/undefined/' ){
82
82
  return;
83
83
  }
84
84
 
85
- wp_localize_script( 'data.js', 'data', $data ); // -> $data が見つからないエラーになる!
85
+ wp_localize_script( 'data.js', 'data', $data );
86
86
  ```
87
87
  【対策2】定数を変更
88
88
  つまり undefined のときは空文字する方法で、個人的にはこの方がいいかと思っています