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

回答編集履歴

5

コード変更

2018/12/31 07:51

投稿

退会済みユーザー
answer CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  ---
32
32
 
33
- 追記3
33
+ 追記3(2018/12/31変更)
34
34
 
35
35
  動作未検証です。
36
36
 
@@ -40,49 +40,53 @@
40
40
  $pages = $wp_query->max_num_pages;
41
41
  $paged = get_query_var("paged") ?: 1;
42
42
 
43
- teratail_paginatio(100, $paged, 5);
43
+ teratail_paginatio($pages, $paged,10);
44
44
  ```
45
45
 
46
- ```PHP
47
- /**
46
+ ```PHP/**
48
47
  * ページネーション出力関数
49
48
  * $pages : 全ページ数
50
49
  * $paged : 現在のページ
51
- * $range : 左右に何ページ表示するか
50
+ * $range : 何ページ表示するか
52
51
  */
53
52
  function teratail_pagination($pages, $paged, $range) {
54
-
53
+
55
- // 1頁のみ
54
+ // 1頁のみ
56
55
  if ( $pages === 1 ) return;
57
-
56
+
58
- // 複数頁
57
+ // 複数頁
59
58
  if ( 1 !== $pages ) {
59
+
60
+ $range = $range - 1;
61
+ $range1 = floor($range/2);
62
+ $range2 = ceil($range/2);
63
+
60
- if( !((($paged-$range) <= 1) && (1 <= ($paged+$range))) )
64
+ if( !((($paged-$range1) <= 1) && (1 <= ($paged+$range2))) )
61
65
  echo '<a href="', get_pagenum_link(1) ,'">', "先頭" ,'</a> ';
62
-
66
+
63
- if($paged-$range-1 > 1 && $paged-10-1 != 1)
67
+ if($paged-$range1-1 > 1 && $paged-10-1 != 1)
64
- echo "… ";
68
+ echo "… ";
65
-
69
+
66
- if( !(($paged-$range) < ($paged-10) && ($paged-10) < ($paged+$range)) && ($paged-10) > 1 )
70
+ if( !(($paged-$range1) < ($paged-10) && ($paged-10) < ($paged+$range2)) && ($paged-10) > 1 )
67
71
  echo '<a href="', get_pagenum_link($paged - 10) ,'">', $paged - 10 ,'</a>… ';
68
-
72
+
69
- for($it = $range; $it > 0; $it--)
73
+ for($it = $range1; $it > 0; $it--)
70
- if( $paged-$it > 0)
74
+ if( $paged-$it > 0)
71
- echo '<a href="', get_pagenum_link($paged - $it) ,'">', $paged - $it ,'</a> ';
75
+ echo '<a href="', get_pagenum_link($paged - $it) ,'">', $paged - $it ,'</a> ';
72
-
76
+
73
- echo $paged, " ";
77
+ echo $paged, " ";
74
-
78
+
75
- for($it = 1; $it <= $range; $it++)
79
+ for($it = 1; $it <= $range2; $it++)
76
- if( $paged + $it <= $pages )
80
+ if( $paged + $it <= $pages )
77
- echo '<a href="', get_pagenum_link($paged + $it) ,'">', $paged + $it ,'</a> ';
81
+ echo '<a href="', get_pagenum_link($paged + $it) ,'">', $paged + $it ,'</a> ';
78
-
82
+
79
- if( !(($paged-$range) < ($paged+10) && ($paged+10) < ($paged+$range)) && ($paged+10) < $pages )
83
+ if( !(($paged-$range1) < ($paged+10) && ($paged+10) < ($paged+$range2)) && ($paged+10) < $pages )
80
84
  echo '…<a href="', get_pagenum_link($paged + 10) ,'">', $paged + 10 ,'</a> ';
81
-
85
+
82
- if($paged+$range+1 < $pages && $paged+10+1 != $pages)
86
+ if($paged+$range2+1 < $pages && $paged+10+1 != $pages)
83
- echo "… ";
87
+ echo "… ";
84
-
88
+
85
- if( !(($paged-$range) <= $pages && $pages <= ($paged+$range)) )
89
+ if( !(($paged-$range1) <= $pages && $pages <= ($paged+$range2)) )
86
90
  echo '<a href="', get_pagenum_link($pages) ,'">', "最後" ,'</a> ';
87
91
  }
88
92
  }

4

全体のコードを追記

2018/12/31 07:50

投稿

退会済みユーザー
answer CHANGED
@@ -26,4 +26,64 @@
26
26
  $max pages = $wp_query->max_num_pages;
27
27
 
28
28
  if($max_page >= $paged+10)echo get_pagenum_link($paged+10)
29
+ ```
30
+
31
+ ---
32
+
33
+ 追記3
34
+
35
+ 動作未検証です。
36
+
37
+ ```PHP
38
+ global $wp_query;
39
+
40
+ $pages = $wp_query->max_num_pages;
41
+ $paged = get_query_var("paged") ?: 1;
42
+
43
+ teratail_paginatio(100, $paged, 5);
44
+ ```
45
+
46
+ ```PHP
47
+ /**
48
+ * ページネーション出力関数
49
+ * $pages : 全ページ数
50
+ * $paged : 現在のページ
51
+ * $range : 左右に何ページ表示するか
52
+ */
53
+ function teratail_pagination($pages, $paged, $range) {
54
+
55
+ // 1頁のみ
56
+ if ( $pages === 1 ) return;
57
+
58
+ // 複数頁
59
+ if ( 1 !== $pages ) {
60
+ if( !((($paged-$range) <= 1) && (1 <= ($paged+$range))) )
61
+ echo '<a href="', get_pagenum_link(1) ,'">', "先頭" ,'</a> ';
62
+
63
+ if($paged-$range-1 > 1 && $paged-10-1 != 1)
64
+ echo "… ";
65
+
66
+ if( !(($paged-$range) < ($paged-10) && ($paged-10) < ($paged+$range)) && ($paged-10) > 1 )
67
+ echo '<a href="', get_pagenum_link($paged - 10) ,'">', $paged - 10 ,'</a>… ';
68
+
69
+ for($it = $range; $it > 0; $it--)
70
+ if( $paged-$it > 0)
71
+ echo '<a href="', get_pagenum_link($paged - $it) ,'">', $paged - $it ,'</a> ';
72
+
73
+ echo $paged, " ";
74
+
75
+ for($it = 1; $it <= $range; $it++)
76
+ if( $paged + $it <= $pages )
77
+ echo '<a href="', get_pagenum_link($paged + $it) ,'">', $paged + $it ,'</a> ';
78
+
79
+ if( !(($paged-$range) < ($paged+10) && ($paged+10) < ($paged+$range)) && ($paged+10) < $pages )
80
+ echo '…<a href="', get_pagenum_link($paged + 10) ,'">', $paged + 10 ,'</a> ';
81
+
82
+ if($paged+$range+1 < $pages && $paged+10+1 != $pages)
83
+ echo "… ";
84
+
85
+ if( !(($paged-$range) <= $pages && $pages <= ($paged+$range)) )
86
+ echo '<a href="', get_pagenum_link($pages) ,'">', "最後" ,'</a> ';
87
+ }
88
+ }
29
89
  ```

3

書きかけのコード追記

2018/12/30 09:08

投稿

退会済みユーザー
answer CHANGED
@@ -19,8 +19,11 @@
19
19
  > 追記戴いたget_pagenum_link($paged + 10):では、例として全50ページある時に41ページ目以降を表示中だと存在しないページを指定して変なことになりますよね。10ページ前も同様です。
20
20
 
21
21
  ```PHP
22
+ //未検証
22
23
  global $wp_query;
24
+ global $paged; // 現在のページ番号
25
+
23
26
  $max pages = $wp_query->max_num_pages;
24
27
 
25
- if(
28
+ if($max_page >= $paged+10)echo get_pagenum_link($paged+10)
26
29
  ```

2

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

2018/12/29 10:40

投稿

退会済みユーザー
answer CHANGED
@@ -10,4 +10,17 @@
10
10
  // 一般的なページネーションを作成した上で、10ページ先のリンクを出力する処理を追加
11
11
  global $paged; // 現在のページ番号
12
12
  echo get_pagenum_link($paged + 10):
13
+ ```
14
+
15
+ ---
16
+
17
+ 追記2
18
+
19
+ > 追記戴いたget_pagenum_link($paged + 10):では、例として全50ページある時に41ページ目以降を表示中だと存在しないページを指定して変なことになりますよね。10ページ前も同様です。
20
+
21
+ ```PHP
22
+ global $wp_query;
23
+ $max pages = $wp_query->max_num_pages;
24
+
25
+ if(
13
26
  ```

1

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

2018/12/29 09:06

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,13 @@
1
1
  特殊なページネーションを使いたいのであれば、プラグインを使うのではなく、専用のページネーションをPHPで書いてしまったほうが手っ取り早いです。
2
2
 
3
- [https://wemo.tech/978](https://wemo.tech/978)や[https://web-ashibi.net/archives/971](https://web-ashibi.net/archives/971)などを参考にして基本的なページネーションを作成したうえで、10ページ先のリンクを表示するように書けば完了です。
3
+ [https://wemo.tech/978](https://wemo.tech/978)や[https://web-ashibi.net/archives/971](https://web-ashibi.net/archives/971)などを参考にして基本的なページネーションを作成したうえで、10ページ先のリンクを表示するように書けば完了です。
4
+
5
+ ---
6
+
7
+ 追記
8
+
9
+ ```PHP
10
+ // 一般的なページネーションを作成した上で、10ページ先のリンクを出力する処理を追加
11
+ global $paged; // 現在のページ番号
12
+ echo get_pagenum_link($paged + 10):
13
+ ```