回答編集履歴

3

仮想ページのリダイレクト処理を想定

2019/07/24 05:25

投稿

YukiYamashina
YukiYamashina

スコア1011

test CHANGED
@@ -3,10 +3,6 @@
3
3
 
4
4
 
5
5
  ```php
6
-
7
- <?php
8
-
9
-
10
6
 
11
7
  add_filter( 'pre_get_posts', function( WP_Query $query ) {
12
8
 
@@ -17,6 +13,18 @@
17
13
  if ( is_admin() || ! $query->is_main_query() ) {
18
14
 
19
15
  return $query;
16
+
17
+ }
18
+
19
+
20
+
21
+ // redirect /parent-cat/child-cat/child-cat/ to /parent-cat/child-cat.
22
+
23
+ if ( isset( $query->query['name'] ) && isset( $query->query['category_name'] ) && basename( $query->query['category_name'] ) === $query->query['name'] ) {
24
+
25
+ wp_redirect( home_url( $query->query['category_name'] ), 301 );
26
+
27
+ exit;
20
28
 
21
29
  }
22
30
 
@@ -38,44 +46,8 @@
38
46
 
39
47
 
40
48
 
41
- // redirect /parent-cat/child-cat/child-cat/ to /parent-cat/child-cat.
42
-
43
- if ( isset( $query->query['name'] ) && isset( $query->query['category_name'] ) && $wp->request === $query->query['category_name'] . '/' . $query->query['name'] ) {
44
-
45
- wp_redirect( home_url( $query->query['category_name'] ), 301 );
46
-
47
- exit;
48
-
49
- }
50
-
51
-
52
-
53
49
  return $query;
54
50
 
55
51
  } );
56
52
 
57
-
58
-
59
- // Prevent /parent-cat/child-cat/ from redirecting to /parent-cat/child-cat/child-cat/.
60
-
61
- add_filter( 'redirect_canonical', function( string $redirect_url, string $requested_url ) {
62
-
63
- global $wp, $wp_query;
64
-
65
-
66
-
67
- if ( isset( $wp_query->query['name'] ) && isset( $wp_query->query['category_name'] ) && $wp->request === $wp_query->query['category_name'] ) {
68
-
69
- return $requested_url;
70
-
71
- }
72
-
73
-
74
-
75
- return $redirect_url;
76
-
77
- }, 10, 2 );
78
-
79
-
80
-
81
53
  ```

2

リダイレクト処理追加

2019/07/24 05:25

投稿

YukiYamashina
YukiYamashina

スコア1011

test CHANGED
@@ -38,10 +38,44 @@
38
38
 
39
39
 
40
40
 
41
+ // redirect /parent-cat/child-cat/child-cat/ to /parent-cat/child-cat.
42
+
43
+ if ( isset( $query->query['name'] ) && isset( $query->query['category_name'] ) && $wp->request === $query->query['category_name'] . '/' . $query->query['name'] ) {
44
+
45
+ wp_redirect( home_url( $query->query['category_name'] ), 301 );
46
+
47
+ exit;
48
+
49
+ }
50
+
51
+
52
+
41
53
  return $query;
42
54
 
43
55
  } );
44
56
 
45
57
 
46
58
 
59
+ // Prevent /parent-cat/child-cat/ from redirecting to /parent-cat/child-cat/child-cat/.
60
+
61
+ add_filter( 'redirect_canonical', function( string $redirect_url, string $requested_url ) {
62
+
63
+ global $wp, $wp_query;
64
+
65
+
66
+
67
+ if ( isset( $wp_query->query['name'] ) && isset( $wp_query->query['category_name'] ) && $wp->request === $wp_query->query['category_name'] ) {
68
+
69
+ return $requested_url;
70
+
71
+ }
72
+
73
+
74
+
75
+ return $redirect_url;
76
+
77
+ }, 10, 2 );
78
+
79
+
80
+
47
81
  ```

1

日本語修正

2019/07/16 15:29

投稿

YukiYamashina
YukiYamashina

スコア1011

test CHANGED
@@ -1,4 +1,4 @@
1
- `pre_get_posts` を利用して、カテゴリーページかつリクエストの `basename` がスラッグ名となる投稿が存在すれば投稿ページとしてクエリすれば可能だと思います。
1
+ `pre_get_posts` を利用して、カテゴリーページかつリクエストの `basename` がスラッグ名となる投稿が存在する場合のみ、投稿ページとしてクエリすることで可能だと思います。
2
2
 
3
3
 
4
4