質問編集履歴

14

rewrite_404_v3 を追加

2022/03/08 13:55

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -107,6 +107,40 @@
107
107
  }
108
108
  }
109
109
  ```
110
+ 続いて、URL構造を "https://example.com/red" でなく "https://example.com/color/red" にした場合として下記`rewrite_404_v3`を試しましたが、こちらも上記`rewrite_404_v2`同様にできませんでした。
111
+ ```PHP
112
+ /*
113
+ functions.php
114
+ */
115
+
116
+ // 現在URLを定義
117
+ define( 'URL', (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . ( $_SERVER['REQUEST_URI'] === '/undefined/' ? '' : $_SERVER['REQUEST_URI'] ) );
118
+
119
+ // 404を回避
120
+ add_action('init', 'rewrite_404_v3');
121
+ function rewrite_404_v3() {
122
+
123
+ // 現在URLからcolorを取得
124
+ $paths = explode( '/', parse_url(URL)['path'] );
125
+ $color = urldecode( $paths[2] ); // $color = 'red' や 'blue' など
126
+
127
+ // レコードを取得
128
+ $colors = get_colors( $color );
129
+ if ( empty($colors) ) {
130
+
131
+ // レコードがない場合は 404 なので何もしない
132
+
133
+ } else {
134
+
135
+ // リライトを実行 → これもやはり効きませんでした
136
+ $regex = 'colors/(\w+)/?'; // ご回答の '/colors/(\w+)/?' と、左記の 'colors/(\w+)/?' で試しました
137
+ add_rewrite_rule($regex, 'index.php?post=1', 'top');
138
+
139
+ }
140
+ }
141
+ ```
142
+
143
+
110
144
  ### 補足
111
145
  一.`wp_colors`の使用は絶対でして、`wp_tags`などデフォルトのテーブルは使わないものとします。
112
146
 

13

修正

2022/02/28 17:34

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -30,7 +30,7 @@
30
30
  add_action( 'wp_enqueue_scripts', 'enqueue_data' );
31
31
  function enqueue_data(){
32
32
 
33
- // colorsを取得
33
+ // レコードを取得
34
34
  $color = 'red';
35
35
  $colors = get_colors( $color );
36
36
 

12

修正

2022/02/28 17:28

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -67,8 +67,8 @@
67
67
  */
68
68
 
69
69
  // 404を回避
70
- add_action('init', 'rewrite_404');
70
+ add_action('init', 'rewrite_404_v1');
71
- function rewrite_404() {
71
+ function rewrite_404_v1() {
72
72
  // リライトを実行 → こうすると404は回避できる
73
73
  $regex = 'red';
74
74
  add_rewrite_rule($regex, 'index.php?post=1', 'top');
@@ -85,13 +85,8 @@
85
85
  define( 'URL', (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . ( $_SERVER['REQUEST_URI'] === '/undefined/' ? '' : $_SERVER['REQUEST_URI'] ) );
86
86
 
87
87
  // 404を回避
88
- add_action('init', 'rewrite_404');
88
+ add_action('init', 'rewrite_404_v2');
89
- function rewrite_404() {
89
+ function rewrite_404_v2() {
90
- // リライトを実行 → こうすると404は回避できる
91
- // $regex = 'red';
92
- // add_rewrite_rule($regex, 'index.php?post=1', 'top');
93
-
94
- // 次のように修正
95
90
 
96
91
  // 現在URLからcolorを取得
97
92
  $paths = explode( '/', parse_url(URL)['path'] );

11

修正

2022/02/28 17:26

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -30,7 +30,7 @@
30
30
  add_action( 'wp_enqueue_scripts', 'enqueue_data' );
31
31
  function enqueue_data(){
32
32
 
33
- // colorを取得
33
+ // colorsを取得
34
34
  $color = 'red';
35
35
  $colors = get_colors( $color );
36
36
 
@@ -93,7 +93,7 @@
93
93
 
94
94
  // 次のように修正
95
95
 
96
- // 現在URL
96
+ // 現在URLからcolorを取得
97
97
  $paths = explode( '/', parse_url(URL)['path'] );
98
98
  $color = urldecode( $paths[1] ); // $color = 'red' や 'blue' など
99
99
 

10

修正

2022/02/28 17:25

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -30,7 +30,7 @@
30
30
  add_action( 'wp_enqueue_scripts', 'enqueue_data' );
31
31
  function enqueue_data(){
32
32
 
33
- // レコードを取得
33
+ // colorを取得
34
34
  $color = 'red';
35
35
  $colors = get_colors( $color );
36
36
 

9

誤字訂正

2022/02/28 14:06

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -128,7 +128,7 @@
128
128
 
129
129
  五.`add_rewrite_rule`にこだわりはないので、他の方法でも全く構いません。
130
130
 
131
- 六.`add_rewrite_rule`の直後に`flush_rewrite_rules`を実行したら解決しましたが、[高コスト](https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/flush_rewrite_rules)らしいの避けたい操作です。
131
+ 六.`add_rewrite_rule`の直後に`flush_rewrite_rules`を実行したら解決しましたが、[高コスト](https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/flush_rewrite_rules)らしいの避けたい操作です。
132
132
 
133
133
  以上です。
134
134
  魔改造で申し訳ございませんが、宜しくお願い致します。

8

補足に六を追加

2022/02/28 13:59

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -128,5 +128,9 @@
128
128
 
129
129
  五.`add_rewrite_rule`にこだわりはないので、他の方法でも全く構いません。
130
130
 
131
+ 六.`add_rewrite_rule`の直後に`flush_rewrite_rules`を実行したら解決しましたが、[高コスト](https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/flush_rewrite_rules)らしいのえ避けたい操作です。
132
+
131
133
  以上です。
132
134
  魔改造で申し訳ございませんが、宜しくお願い致します。
135
+
136
+

7

加筆

2022/02/28 13:48

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -18,7 +18,7 @@
18
18
  );
19
19
 
20
20
  insert into wp_colors
21
- values (1, 'red', '情熱の色');
21
+ values (1, 'red', '情熱の色'); -- 実際のレコードは10万行ほどあります
22
22
  ```
23
23
  そして "https://example.com/red" にアクセスしたときに以下のPHPで`red`のレコードを取得し、JSでHTMLを描画します。
24
24
  ```php

6

補足を加筆

2022/02/28 13:44

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -117,7 +117,12 @@
117
117
 
118
118
  二.すべてのソースコードは簡易版であり、実際はインジェクション対策などを介していますのでご安心ください。
119
119
 
120
- 三.HTMLをPHPで描画することは一切なく、該当のソースコードの流れのように`wp_localize_script`で出力された後にJSで描画されるか、もしくはページ遷移の際はajaxでechoされた後にJSで描画されます。(なのでWordPressを使う必要性はあまりないわけですが…)
120
+ 三.HTMLをPHPで描画することは一切なく、該当のソースコードの流れのように`wp_localize_script`で出力された後にJSで描画されるか、もしくはページ遷移の際はajaxでechoされた後にJSで描画されます。そのため index.php、single.php、page.php は全て以下の3行だけです。(なのでWordPressを使う必要性はあまりないわけですが…)
121
+ ```PHP
122
+ <?php
123
+ get_header();
124
+ get_footer();
125
+ ```
121
126
 
122
127
  四.もちろん「パーマリンク設定 > 変更を保存」は実行済みです。
123
128
 

5

補足に五を追加

2022/02/28 13:39

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -1,13 +1,13 @@
1
1
  ### 前提・実現したいこと
2
2
  WordPressで独自テーブル`wp_colors`のデータを出力しています。
3
3
  このときデータがなければ404でいいのですが、データがあるときは404を回避したいです。
4
-
5
4
 
6
5
  ### 発生している問題・エラーメッセージ
7
6
  404を回避できず、コンソール画面にこのエラーメッセージが表示されてしまいます。
8
7
  ```
9
8
  GET https://example.com/red/ 404
10
9
  ```
10
+
11
11
  ### 該当のソースコード
12
12
  こんな風に`wp_colors`テーブルを作り、値を`insert`しておきます。
13
13
  ```SQL
@@ -55,7 +55,6 @@
55
55
  $('body').append(`<p>${color.details}<p>`); // HTMLを描画
56
56
  });
57
57
  ```
58
-
59
58
  この結果、HTMLは`<p>情熱の色<p>`と描画できますが、しかしこのページは404ステータスになってしまいます。
60
59
 
61
60
  どのようにすれば普通の`wp_posts`等と同じように、「データがあるので404ではないですよ」とステータスを返すことができるでしょうか?
@@ -120,4 +119,9 @@
120
119
 
121
120
  三.HTMLをPHPで描画することは一切なく、該当のソースコードの流れのように`wp_localize_script`で出力された後にJSで描画されるか、もしくはページ遷移の際はajaxでechoされた後にJSで描画されます。(なのでWordPressを使う必要性はあまりないわけですが…)
122
121
 
123
- 四.もちろん「パーマリンク設定 > 設定を保存」は実行済みです。
122
+ 四.もちろん「パーマリンク設定 > 変更を保存」は実行済みです。
123
+
124
+ 五.`add_rewrite_rule`にこだわりはないので、他の方法でも全く構いません。
125
+
126
+ 以上です。
127
+ 魔改造で申し訳ございませんが、宜しくお願い致します。

4

補足四を追加

2022/02/28 13:27

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -76,6 +76,7 @@
76
76
  }
77
77
  ```
78
78
  あとはこれを現在URLに応じて動的に指定するだけだと思い次のように修正したところ、また404になってしまいました。つまりどうやら、現在URLに応じて動的に指定する、ということが`add_rewrite_rule`ではできない様子なのです。
79
+
79
80
  ```PHP
80
81
  /*
81
82
  functions.php
@@ -119,3 +120,4 @@
119
120
 
120
121
  三.HTMLをPHPで描画することは一切なく、該当のソースコードの流れのように`wp_localize_script`で出力された後にJSで描画されるか、もしくはページ遷移の際はajaxでechoされた後にJSで描画されます。(なのでWordPressを使う必要性はあまりないわけですが…)
121
122
 
123
+ 四.もちろん「パーマリンク設定 > 設定を保存」は実行済みです。

3

補足を訂正

2022/02/28 13:20

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -117,5 +117,5 @@
117
117
 
118
118
  二.すべてのソースコードは簡易版であり、実際はインジェクション対策などを介していますのでご安心ください。
119
119
 
120
- 三.該当のソースコードにあるSQL、PHP、JavaScriptの流れは絶対条件す。HTMLをPHPで描画することは一切ございません。(なのでWordPressを使う必要性はあまりないわけですが…)
120
+ 三.HTMLをPHPで描画することは一切なく、該当のソースコードの流れのよう`wp_localize_script`で出力さた後にJSで描画されるか、もしくページ遷移の際はajaxechoされた後にJSで描画されます。(なのでWordPressを使う必要性はあまりないわけですが…)
121
121
 

2

httpをhttpsに変更

2022/02/28 13:15

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -20,7 +20,7 @@
20
20
  insert into wp_colors
21
21
  values (1, 'red', '情熱の色');
22
22
  ```
23
- そして "http://example.com/red" にアクセスしたときに以下のPHPで`red`のレコードを取得し、JSでHTMLを描画します。
23
+ そして "https://example.com/red" にアクセスしたときに以下のPHPで`red`のレコードを取得し、JSでHTMLを描画します。
24
24
  ```php
25
25
  /*
26
26
  functions.php
@@ -61,7 +61,7 @@
61
61
  どのようにすれば普通の`wp_posts`等と同じように、「データがあるので404ではないですよ」とステータスを返すことができるでしょうか?
62
62
 
63
63
  ### 試したこと
64
- 以下`add_rewrite_rule`を用いて、"http://example.com/red" にアクセスしたときに無理矢理`post=1`(つまりWordPressインストール時にあるHello,World!の記事)に飛ばしましたところ、404は回避できました。
64
+ 以下`add_rewrite_rule`を用いて、"https://example.com/red" にアクセスしたときに無理矢理`post=1`(つまりWordPressインストール時にあるHello,World!の記事)に飛ばしましたところ、404は回避できました。
65
65
  ```PHP
66
66
  /*
67
67
  functions.php

1

補足しました

2022/02/28 13:14

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -2,8 +2,6 @@
2
2
  WordPressで独自テーブル`wp_colors`のデータを出力しています。
3
3
  このときデータがなければ404でいいのですが、データがあるときは404を回避したいです。
4
4
 
5
- ※`wp_colors`の使用は絶対でして、`wp_tags`などデフォルトのテーブルは使わないものとします。
6
- ※コードは簡易版であり、実際はインジェクション対策などを介していますのでご安心ください。
7
5
 
8
6
  ### 発生している問題・エラーメッセージ
9
7
  404を回避できず、コンソール画面にこのエラーメッセージが表示されてしまいます。
@@ -114,4 +112,10 @@
114
112
  }
115
113
  }
116
114
  ```
115
+ ### 補足
116
+ 一.`wp_colors`の使用は絶対でして、`wp_tags`などデフォルトのテーブルは使わないものとします。
117
117
 
118
+ 二.すべてのソースコードは簡易版であり、実際はインジェクション対策などを介していますのでご安心ください。
119
+
120
+ 三.該当のソースコードにあるSQL、PHP、JavaScriptの流れは絶対条件です。HTMLをPHPで描画することは一切ございません。(なのでWordPressを使う必要性はあまりないわけですが…)
121
+