回答編集履歴

5

コード変更

2018/12/31 07:51

投稿

退会済みユーザー
test CHANGED
@@ -62,7 +62,7 @@
62
62
 
63
63
 
64
64
 
65
- 追記3
65
+ 追記3(2018/12/31変更)
66
66
 
67
67
 
68
68
 
@@ -82,15 +82,13 @@
82
82
 
83
83
 
84
84
 
85
- teratail_paginatio(100, $paged, 5);
85
+ teratail_paginatio($pages, $paged,10);
86
86
 
87
87
  ```
88
88
 
89
89
 
90
90
 
91
- ```PHP
92
-
93
- /**
91
+ ```PHP/**
94
92
 
95
93
  * ページネーション出力関数
96
94
 
@@ -98,75 +96,85 @@
98
96
 
99
97
  * $paged : 現在のページ
100
98
 
101
- * $range : 左右に何ページ表示するか
99
+ * $range : 何ページ表示するか
102
100
 
103
101
  */
104
102
 
105
103
  function teratail_pagination($pages, $paged, $range) {
106
104
 
107
-
105
+
108
106
 
109
- // 1頁のみ
107
+ // 1頁のみ
110
108
 
111
109
  if ( $pages === 1 ) return;
112
110
 
113
-
111
+
114
112
 
115
- // 複数頁
113
+ // 複数頁
116
114
 
117
115
  if ( 1 !== $pages ) {
118
116
 
117
+
118
+
119
+ $range = $range - 1;
120
+
121
+ $range1 = floor($range/2);
122
+
123
+ $range2 = ceil($range/2);
124
+
125
+
126
+
119
- if( !((($paged-$range) <= 1) && (1 <= ($paged+$range))) )
127
+ if( !((($paged-$range1) <= 1) && (1 <= ($paged+$range2))) )
120
128
 
121
129
  echo '<a href="', get_pagenum_link(1) ,'">', "先頭" ,'</a> ';
122
130
 
123
-
131
+
124
132
 
125
- if($paged-$range-1 > 1 && $paged-10-1 != 1)
133
+ if($paged-$range1-1 > 1 && $paged-10-1 != 1)
126
134
 
127
- echo "… ";
135
+ echo "… ";
128
136
 
129
-
137
+
130
138
 
131
- if( !(($paged-$range) < ($paged-10) && ($paged-10) < ($paged+$range)) && ($paged-10) > 1 )
139
+ if( !(($paged-$range1) < ($paged-10) && ($paged-10) < ($paged+$range2)) && ($paged-10) > 1 )
132
140
 
133
141
  echo '<a href="', get_pagenum_link($paged - 10) ,'">', $paged - 10 ,'</a>… ';
134
142
 
135
-
143
+
136
144
 
137
- for($it = $range; $it > 0; $it--)
145
+ for($it = $range1; $it > 0; $it--)
138
146
 
139
- if( $paged-$it > 0)
147
+ if( $paged-$it > 0)
140
148
 
141
- echo '<a href="', get_pagenum_link($paged - $it) ,'">', $paged - $it ,'</a> ';
149
+ echo '<a href="', get_pagenum_link($paged - $it) ,'">', $paged - $it ,'</a> ';
142
150
 
143
-
151
+
144
152
 
145
- echo $paged, " ";
153
+ echo $paged, " ";
146
154
 
147
-
155
+
148
156
 
149
- for($it = 1; $it <= $range; $it++)
157
+ for($it = 1; $it <= $range2; $it++)
150
158
 
151
- if( $paged + $it <= $pages )
159
+ if( $paged + $it <= $pages )
152
160
 
153
- echo '<a href="', get_pagenum_link($paged + $it) ,'">', $paged + $it ,'</a> ';
161
+ echo '<a href="', get_pagenum_link($paged + $it) ,'">', $paged + $it ,'</a> ';
154
162
 
155
-
163
+
156
164
 
157
- if( !(($paged-$range) < ($paged+10) && ($paged+10) < ($paged+$range)) && ($paged+10) < $pages )
165
+ if( !(($paged-$range1) < ($paged+10) && ($paged+10) < ($paged+$range2)) && ($paged+10) < $pages )
158
166
 
159
167
  echo '…<a href="', get_pagenum_link($paged + 10) ,'">', $paged + 10 ,'</a> ';
160
168
 
161
-
169
+
162
170
 
163
- if($paged+$range+1 < $pages && $paged+10+1 != $pages)
171
+ if($paged+$range2+1 < $pages && $paged+10+1 != $pages)
164
172
 
165
- echo "… ";
173
+ echo "… ";
166
174
 
167
-
175
+
168
176
 
169
- if( !(($paged-$range) <= $pages && $pages <= ($paged+$range)) )
177
+ if( !(($paged-$range1) <= $pages && $pages <= ($paged+$range2)) )
170
178
 
171
179
  echo '<a href="', get_pagenum_link($pages) ,'">', "最後" ,'</a> ';
172
180
 

4

全体のコードを追記

2018/12/31 07:50

投稿

退会済みユーザー
test CHANGED
@@ -55,3 +55,123 @@
55
55
  if($max_page >= $paged+10)echo get_pagenum_link($paged+10)
56
56
 
57
57
  ```
58
+
59
+
60
+
61
+ ---
62
+
63
+
64
+
65
+ 追記3
66
+
67
+
68
+
69
+ 動作未検証です。
70
+
71
+
72
+
73
+ ```PHP
74
+
75
+ global $wp_query;
76
+
77
+
78
+
79
+ $pages = $wp_query->max_num_pages;
80
+
81
+ $paged = get_query_var("paged") ?: 1;
82
+
83
+
84
+
85
+ teratail_paginatio(100, $paged, 5);
86
+
87
+ ```
88
+
89
+
90
+
91
+ ```PHP
92
+
93
+ /**
94
+
95
+ * ページネーション出力関数
96
+
97
+ * $pages : 全ページ数
98
+
99
+ * $paged : 現在のページ
100
+
101
+ * $range : 左右に何ページ表示するか
102
+
103
+ */
104
+
105
+ function teratail_pagination($pages, $paged, $range) {
106
+
107
+
108
+
109
+ // 1頁のみ
110
+
111
+ if ( $pages === 1 ) return;
112
+
113
+
114
+
115
+ // 複数頁
116
+
117
+ if ( 1 !== $pages ) {
118
+
119
+ if( !((($paged-$range) <= 1) && (1 <= ($paged+$range))) )
120
+
121
+ echo '<a href="', get_pagenum_link(1) ,'">', "先頭" ,'</a> ';
122
+
123
+
124
+
125
+ if($paged-$range-1 > 1 && $paged-10-1 != 1)
126
+
127
+ echo "… ";
128
+
129
+
130
+
131
+ if( !(($paged-$range) < ($paged-10) && ($paged-10) < ($paged+$range)) && ($paged-10) > 1 )
132
+
133
+ echo '<a href="', get_pagenum_link($paged - 10) ,'">', $paged - 10 ,'</a>… ';
134
+
135
+
136
+
137
+ for($it = $range; $it > 0; $it--)
138
+
139
+ if( $paged-$it > 0)
140
+
141
+ echo '<a href="', get_pagenum_link($paged - $it) ,'">', $paged - $it ,'</a> ';
142
+
143
+
144
+
145
+ echo $paged, " ";
146
+
147
+
148
+
149
+ for($it = 1; $it <= $range; $it++)
150
+
151
+ if( $paged + $it <= $pages )
152
+
153
+ echo '<a href="', get_pagenum_link($paged + $it) ,'">', $paged + $it ,'</a> ';
154
+
155
+
156
+
157
+ if( !(($paged-$range) < ($paged+10) && ($paged+10) < ($paged+$range)) && ($paged+10) < $pages )
158
+
159
+ echo '…<a href="', get_pagenum_link($paged + 10) ,'">', $paged + 10 ,'</a> ';
160
+
161
+
162
+
163
+ if($paged+$range+1 < $pages && $paged+10+1 != $pages)
164
+
165
+ echo "… ";
166
+
167
+
168
+
169
+ if( !(($paged-$range) <= $pages && $pages <= ($paged+$range)) )
170
+
171
+ echo '<a href="', get_pagenum_link($pages) ,'">', "最後" ,'</a> ';
172
+
173
+ }
174
+
175
+ }
176
+
177
+ ```

3

書きかけのコード追記

2018/12/30 09:08

投稿

退会済みユーザー
test CHANGED
@@ -40,12 +40,18 @@
40
40
 
41
41
  ```PHP
42
42
 
43
+ //未検証
44
+
43
45
  global $wp_query;
46
+
47
+ global $paged; // 現在のページ番号
48
+
49
+
44
50
 
45
51
  $max pages = $wp_query->max_num_pages;
46
52
 
47
53
 
48
54
 
49
- if(
55
+ if($max_page >= $paged+10)echo get_pagenum_link($paged+10)
50
56
 
51
57
  ```

2

質問者コメント修正に対しての追記

2018/12/29 10:40

投稿

退会済みユーザー
test CHANGED
@@ -23,3 +23,29 @@
23
23
  echo get_pagenum_link($paged + 10):
24
24
 
25
25
  ```
26
+
27
+
28
+
29
+ ---
30
+
31
+
32
+
33
+ 追記2
34
+
35
+
36
+
37
+ > 追記戴いたget_pagenum_link($paged + 10):では、例として全50ページある時に41ページ目以降を表示中だと存在しないページを指定して変なことになりますよね。10ページ前も同様です。
38
+
39
+
40
+
41
+ ```PHP
42
+
43
+ global $wp_query;
44
+
45
+ $max pages = $wp_query->max_num_pages;
46
+
47
+
48
+
49
+ if(
50
+
51
+ ```

1

質問者のコメントをうけて追記

2018/12/29 09:06

投稿

退会済みユーザー
test CHANGED
@@ -3,3 +3,23 @@
3
3
 
4
4
 
5
5
  [https://wemo.tech/978](https://wemo.tech/978)や[https://web-ashibi.net/archives/971](https://web-ashibi.net/archives/971)などを参考にして基本的なページネーションを作成したうえで、10ページ先のリンクを表示するように書けば完了です。
6
+
7
+
8
+
9
+ ---
10
+
11
+
12
+
13
+ 追記
14
+
15
+
16
+
17
+ ```PHP
18
+
19
+ // 一般的なページネーションを作成した上で、10ページ先のリンクを出力する処理を追加
20
+
21
+ global $paged; // 現在のページ番号
22
+
23
+ echo get_pagenum_link($paged + 10):
24
+
25
+ ```