質問編集履歴
14
rewrite_404_v3 を追加
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
修正
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
|
+
// レコードを取得
|
34
34
|
$color = 'red';
|
35
35
|
$colors = get_colors( $color );
|
36
36
|
|
12
修正
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
修正
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
修正
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
誤字訂正
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
補足に六を追加
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
加筆
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
補足を加筆
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
補足に五を追加
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
補足四を追加
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
補足を訂正
test
CHANGED
File without changes
|
test
CHANGED
@@ -117,5 +117,5 @@
|
|
117
117
|
|
118
118
|
二.すべてのソースコードは簡易版であり、実際はインジェクション対策などを介していますのでご安心ください。
|
119
119
|
|
120
|
-
三.該当のソースコードに
|
120
|
+
三.HTMLをPHPで描画することは一切なく、該当のソースコードの流れのように`wp_localize_script`で出力された後にJSで描画されるか、もしくはページ遷移の際はajaxでechoされた後にJSで描画されます。(なのでWordPressを使う必要性はあまりないわけですが…)
|
121
121
|
|
2
httpをhttpsに変更
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
補足しました
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
|
+
|