具体代码函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
function custom_pagination() {
global $wp_query;
$total_pages = $wp_query->max_num_pages;
if ($total_pages <= 1) return;

$current_page = max(1, get_query_var('paged'));
$pagination = '<div class="pagination">';

// 上一页链接
if ($current_page > 1) {
$pagination .= sprintf(
'<a href="%s" class="prev">上一页</a>',
esc_url(get_pagenum_link($current_page - 1))
);
}

// 页码显示逻辑
if ($total_pages <= 6) {
// 总页数≤6时显示所有页码
for ($i = 1; $i <= $total_pages; $i++) {
$active_class = ($i == $current_page) ? ' active' : '';
$pagination .= sprintf(
'<a href="%s" class="page%s">%d</a>',
esc_url(get_pagenum_link($i)),
$active_class,
$i
);
}
} else {
// 总页数>6时的智能分页
$show_pages = [];

// 总是显示第1页
$show_pages[] = 1;

// 当前页附近的页面
$start = max(2, $current_page - 1);
$end = min($total_pages - 1, $current_page + 1);

// 确保显示足够的页码
if ($start > 2) {
$show_pages[] = '...';
}

for ($i = $start; $i <= $end; $i++) {
$show_pages[] = $i;
}

if ($end < $total_pages - 1) {
$show_pages[] = '...';
}

// 总是显示最后一页
if ($total_pages > 1) {
$show_pages[] = $total_pages;
}

// 生成页码链接
foreach ($show_pages as $page) {
if ($page === '...') {
$pagination .= '<span class="ellipsis">...</span>';
} else {
$active_class = ($page == $current_page) ? ' active' : '';
$pagination .= sprintf(
'<a href="%s" class="page%s">%d</a>',
esc_url(get_pagenum_link($page)),
$active_class,
$page
);
}
}
}

// 下一页链接
if ($current_page < $total_pages) {
$pagination .= sprintf(
'<a href="%s" class="next">下一页</a>',
esc_url(get_pagenum_link($current_page + 1))
);
}

$pagination .= '</div>';
echo $pagination;
}

// 调用分页函数
custom_pagination();
?>