在 WordPress 主题的世界里,子比主题一直备受青睐。今天要给大家分享的,就是一款专为子比主题定制的文章归档页面模板,让你的网站文章归档页面更加个性化、数据化。
一、模板亮点抢先看
别的主题有带图表的文章归档页面,子比主题当然也不能落后。这款模板仅适用于子比主题,文章卡片借助子比主题自带的卡片函数生成,确保了整体风格的一致性。
- 数据可视化图表:利用 Apache ECharts 这一精美的图表组件,实现了多个维度的数据可视化。比如文章分类统计,能清晰展示基于文章数量的比例,帮助你快速了解网站不同分类文章的占比情况;用户类型统计基于用户数量的比例呈现,让你对网站用户构成一目了然;还有运营时间统计、文章总量统计、评论总量统计、注册用户统计等关键数据,都能直观呈现。
- 年度更新统计图:以 2025 年为例,有专门的文章更新年度更新统计图,从 1 月到 12 月,每月文章更新情况清晰可见,方便你回顾和分析文章发布规律。
二、技术实现与优势
- 缓存机制:运用 WordPress 自带的 Transient 瞬态 API 缓存,该页面缓存一天。这不仅能提高页面加载速度,还能减轻服务器压力,为用户带来更流畅的访问体验。
- 依赖子比主题内置函数:充分利用子比主题的内置函数,保障了模板与主题的高度适配,减少了兼容性问题。
三、安装使用指南
在子比主题目录下的pages
文件夹创建一个 PHP 文件,文件名可自行设定。如果是使用子主题,示例中直接命名为archives.php
。代码注释十分详细,对于有开发能力的用户来说,方便在此基础上进行二次开发,添加自己需要的功能。
四、演示效果
![图片[1]-zibll子比主题文章归档美化:可视化文章归档新体验[zibll子比美化]-狸狸库 - 网络资源收集与分享](https://liliku.oss-cn-chengdu.aliyuncs.com/wp-content/uploads/2025/05/image-77.png)
五、背景知识拓展
Apache ECharts 是一个开源的可视化库,它提供了丰富的图表类型,如柱状图、折线图、饼图等,能够满足各种数据可视化需求。在网站建设中,合理运用数据可视化技术,不仅能提升网站的专业性和美观度,还能帮助网站管理员更好地分析数据,做出决策。而 WordPress 的 Transient 瞬态 API 缓存则是一种临时存储数据的机制,它可以将频繁访问的数据缓存起来,下次请求时直接从缓存中读取,大大提高了网站性能。
效果(一)
![图片[2]-zibll子比主题文章归档美化:可视化文章归档新体验[zibll子比美化]-狸狸库 - 网络资源收集与分享](https://liliku.oss-cn-chengdu.aliyuncs.com/wp-content/uploads/2025/05/image-78.png)
<?php
/**
* Template name: zibll-文章归档(1) Www.FuLiWu.Vip
* Description: A archives page for displaying article statistics and monthly updates.
*/
// 获取分类统计信息并缓存
function get_category_statistics() {
return get_cached_data('category_stats', function() {
$categories = get_categories(['hide_empty' => false]);
$data = [];
foreach ($categories as $category) {
$data[] = ['value' => $category->count, 'name' => $category->name];
}
return json_encode($data);
});
}
// 获取文章热力图数据并缓存
function get_heatmap_data() {
return get_cached_data('heatmap_data', function() {
global $wpdb;
// 使用SQL查询一次性获取所有必要的数据,以减少循环中的函数调用
$query = "
SELECT DATE(post_date) AS date, COUNT(*) AS count
FROM {$wpdb->posts}
WHERE post_type = 'post' AND post_status = 'publish'
GROUP BY DATE(post_date)
ORDER BY date ASC
";
$results = $wpdb->get_results($query, ARRAY_A);
// 填充缺失的日期
if (!empty($results)) {
$start_date = $results[0]['date'];
$end_date = end($results)['date'];
$current_date = strtotime($start_date);
$heatmap_data = [];
while (date('Y-m-d', $current_date) <= $end_date) {
$formatted_date = date('Y-m-d', $current_date);
$count = 0;
foreach ($results as $result) {
if ($result['date'] === $formatted_date) {
$count = $result['count'];
break;
}
}
$heatmap_data[] = [$formatted_date, $count];
$current_date = strtotime('+1 day', $current_date);
}
return json_encode($heatmap_data);
} else {
return json_encode([]);
}
});
}
// 获取用户统计数据并缓存
function get_user_vip_statistics() {
return get_cached_data('user_vip_stats', function() {
// 如果有更高效的获取会员级别的方式,请替换zib_get_user_vip_level()
$users = get_users(['fields' => ['ID']]);
$user_counts = [
'normal' => 0,
'vip_1' => 0,
'vip_2' => 0
];
foreach ($users as $user) {
$vip_level = zib_get_user_vip_level($user->ID);
switch ($vip_level) {
case 1:
$user_counts['vip_1']++;
break;
case 2:
$user_counts['vip_2']++;
break;
default:
$user_counts['normal']++;
break;
}
}
$chart_data = [
['value' => $user_counts['normal'], 'name' => '普通用户'],
['value' => $user_counts['vip_1'], 'name' => _pz('pay_user_vip_1_name')],
['value' => $user_counts['vip_2'], 'name' => _pz('pay_user_vip_2_name')]
];
return json_encode($chart_data);
});
}
// 使用瞬态API缓存数据以减少数据库查询次数
function get_cached_data($transient_key, $fetch_callback) {
if (false === ($data = get_transient($transient_key))) {
$data = call_user_func($fetch_callback);
set_transient($transient_key, $data, DAY_IN_SECONDS); // 缓存一天
}
return $data;
}
// 渲染小部件
function render_archives_widgets($type = 'day') {
// 初始化变量
$icons = [
'day' => ['icon' => 'fa fa-calendar-check-o', 'color' => 'c-blue-2', 'title' => '运营时间'],
'post' => ['icon' => 'fa fa-file-text', 'color' => 'c-green', 'title' => '文章总量'],
'comment' => ['icon' => 'fa fa-comments', 'color' => 'c-yellow', 'title' => '评论总量'],
'user' => ['icon' => 'fa fa-users', 'color' => 'c-blue', 'title' => '注册用户']
];
// 根据传入的参数类型获取统计数据并构建HTML
switch ($type) {
case 'day':
// 尝试获取ID为1的用户注册时间作为运营时间起点
$first_user = get_userdata(1);
if ($first_user && !empty($first_user->user_registered)) {
$start_time = strtotime($first_user->user_registered);
} else {
// 如果获取不到用户1的数据,则回退到站点设置时间或者当前时间
$start_time = strtotime(get_option('siteorigin_setting_time')) ?: time();
}
$statistic = esc_html(floor((time() - $start_time) / (60 * 60 * 24))) . ' 天';
break;
case 'post':
$statistic = esc_html(wp_count_posts()->publish);
break;
case 'comment':
$approved_comments = get_comment_count()['approved'];
$pending_comments = get_comment_count()['moderated'];
$spam_comments = get_comment_count()['spam'];
$trash_comments = get_comment_count()['trash'];
$statistic = esc_html($approved_comments + $pending_comments + $spam_comments + $trash_comments);
break;
case 'user':
$statistic = esc_html(count_users()['total_users']);
break;
default:
return; // 如果类型不匹配,则不输出任何内容
}
// 输出美化后的HTML结构
echo '<div class="stat-widget">';
echo '<div class="stat-title">' . $icons[$type]['title'] . '</div>';
echo '<div class="stat-content">';
echo '<span class="stat-number ' . $icons[$type]['color'] . '">' . $statistic . '</span>';
echo '<i class="stat-icon ' . $icons[$type]['icon'] . ' ' . $icons[$type]['color'] . '"></i>';
echo '</div></div>';
}
// 在适当的地方调用这些函数以获取所需的数据
$json_data = get_category_statistics();
$json_heatmap_data = get_heatmap_data();
$json_chart_data = get_user_vip_statistics();
function Grace_archives_scripts() {
// 注册并加载ECharts库
wp_enqueue_script('echarts', 'https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js', array(), null, true);
// 注册自定义JS文件
wp_enqueue_script('archives-script', 'https://www.vxras.com/wp-content/themes/grace/assets/js/archives.js', array('echarts'), null, true);
// 使用wp_localize_script将PHP变量传递给JavaScript
$data_to_js = array(
'vipChartData' => json_decode(get_user_vip_statistics(), true),
'postChartData' => json_decode(get_category_statistics(), true),
'heatmapData' => json_decode(get_heatmap_data(), true)
);
wp_localize_script('archives-script', 'chartData', $data_to_js);
// 添加自定义CSS
wp_enqueue_style('archives-style', get_template_directory_uri() . '/assets/css/archives.css', array(), null);
// 如果没有archives.css文件,可以直接内联CSS
$custom_css = "
/* 整体页面样式 */
.archives-container {
background-color: #f9f9f9;
padding: 30px 0;
}
/* 卡片样式 */
.theme-box {
background-color: #fff;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.05);
overflow: hidden;
margin-bottom: 30px;
transition: all 0.3s ease;
}
.theme-box:hover {
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
}
/* 图表容器 */
.chart-container {
padding: 20px;
margin-bottom: 25px;
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
}
.chart-title {
font-size: 18px;
font-weight: 600;
color: #333;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 1px solid #eee;
}
/* 统计小部件 */
.stats-container {
display: flex;
flex-wrap: wrap;
gap: 15px;
margin-bottom: 25px;
}
.stat-widget {
flex: 1;
min-width: 150px;
background: #fff;
padding: 15px;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
transition: all 0.3s ease;
}
.stat-widget:hover {
transform: translateY(-3px);
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
}
.stat-title {
font-size: 14px;
color: #666;
margin-bottom: 10px;
}
.stat-content {
display: flex;
justify-content: space-between;
align-items: center;
}
.stat-number {
font-size: 22px;
font-weight: 700;
}
.stat-icon {
font-size: 24px;
opacity: 0.8;
}
/* 颜色类 */
.c-blue-2 { color: #3498db; }
.c-green { color: #2ecc71; }
.c-yellow { color: #f39c12; }
.c-blue { color: #2980b9; }
/* 文章归档部分 */
.archives-list {
padding: 0 20px 20px;
}
.archives-title {
display: flex;
justify-content: space-between;
align-items: center;
padding: 15px 0;
margin-bottom: 20px;
border-bottom: 1px solid #eee;
}
.archives-title h3 {
font-size: 20px;
font-weight: 600;
color: #333;
margin: 0;
}
.toggle-button {
padding: 5px 15px;
background: #3498db;
color: white;
border-radius: 20px;
font-size: 14px;
cursor: pointer;
transition: all 0.3s ease;
}
.toggle-button:hover {
background: #2980b9;
}
/* 折叠面板样式 */
.panel {
margin-bottom: 15px;
border: none;
border-radius: 8px;
overflow: hidden;
}
.panel-heading {
padding: 12px 15px;
background-color: #f8f9fa;
border-radius: 8px;
cursor: pointer;
transition: all 0.3s ease;
}
.panel-heading:hover {
background-color: #e9ecef;
}
.panel-heading i {
margin-right: 10px;
transition: transform 0.3s ease;
}
.panel-heading[aria-expanded='true'] i {
transform: rotate(45deg);
}
.biaoti {
font-size: 16px;
color: #444;
}
.panel-body {
padding: 15px;
background-color: #fff;
}
/* 响应式调整 */
@media (max-width: 768px) {
.stats-container {
flex-direction: column;
}
.stat-widget {
margin-bottom: 15px;
}
}
";
wp_add_inline_style('archives-style', $custom_css);
}
add_action('wp_enqueue_scripts', 'Grace_archives_scripts');
// 获取头部样式
get_header();
$post_id = get_queried_object_id();
$header_style = zib_get_page_header_style($post_id);
?>
<!-- 页面主体 -->
<main class="container archives-container">
<div class="content-wrap">
<div class="content-layout">
<?php if ($header_style != 1) { echo zib_get_page_header($post_id);} ?>
<div class="theme-box">
<?php if ($header_style == 1) { echo zib_get_page_header($post_id);} ?>
<article>
<div class="chart-container">
<div class="chart-title">文章分类统计</div>
<div id="post" style="height:400px;"></div>
</div>
<div class="chart-container">
<div class="chart-title">文章发布时间热力图</div>
<div id="time" style="height:300px;"></div>
</div>
<div class="archives-list">
<div class="archives-title">
<h3>文章归档</h3>
<a class="toggle-button" href="javascript:;" id="toggleAll">展开全部</a>
</div>
<div data-nav="posts" class="wp-posts-content">
<?php
$previous_year = 0;
$previous_month = 0;
$collapse_id = 0;
// 获取所有文章
$myposts = get_posts('numberposts=-1&orderby=post_date&order=DESC');
foreach ($myposts as $post) :
setup_postdata($post);
$year = mysql2date('Y', $post->post_date);
$month = mysql2date('n', $post->post_date);
if ($year != $previous_year || $month != $previous_month) :
// 如果不是第一个月,则关闭上一个折叠面板
if ($collapse_id > 0) {
echo '</div></div></div>';
}
// 开始新的月份折叠面板
$collapse_id++;
echo '<div class="wp-block-zibllblock-collapse">';
echo '<div class="panel" data-theme="panel" data-isshow="false">';
echo '<div class="panel-heading collapsed" href="#collapse_' . esc_attr($collapse_id) . '" data-toggle="collapse" aria-controls="collapseExample" aria-expanded="false">';
echo '<i class="fa fa-plus"></i><strong class="biaoti">' . get_the_time('Y年n月') . '</strong>';
echo '</div>';
echo '<div class="collapse" id="collapse_' . esc_attr($collapse_id) . '" aria-expanded="false" style="height: 0px;">';
echo '<div class="panel-body">';
endif;
// 输出单篇文章内容
echo '<div class="archive-post">';
echo '<span class="archive-date">' . get_the_time('d日') . '</span>';
echo '<a href="' . get_permalink() . '" title="' . get_the_title() . '">' . get_the_title() . '</a>';
echo '</div>';
$previous_year = $year;
$previous_month = $month;
endforeach;
// 关闭最后一个折叠面板(如果有)
if ($collapse_id > 0) {
echo '</div></div></div>';
}
wp_reset_query();
wp_reset_postdata();
?>
</div>
</div>
</article>
</div>
<?php comments_template('/template/comments.php', true); ?>
</div>
</div>
<div class="sidebar">
<div class="chart-container">
<div class="chart-title">用户会员统计</div>
<div id="vip-user" style="height: 350px;"></div>
</div>
<div class="stats-container">
<?php render_archives_widgets('day'); ?>
<?php render_archives_widgets('post'); ?>
</div>
<div class="stats-container">
<?php render_archives_widgets('comment'); ?>
<?php render_archives_widgets('user'); ?>
</div>
</div>
</main>
<script type="text/javascript">
// 页面加载完成后初始化图表
document.addEventListener('DOMContentLoaded', function() {
// 初始化折叠面板交互
const toggleAllBtn = document.getElementById('toggleAll');
const panels = document.querySelectorAll('.panel-heading');
let isAllExpanded = false;
if (toggleAllBtn) {
toggleAllBtn.addEventListener('click', function() {
isAllExpanded = !isAllExpanded;
panels.forEach(panel => {
const target = document.querySelector(panel.getAttribute('href'));
if (isAllExpanded) {
panel.classList.remove('collapsed');
panel.setAttribute('aria-expanded', 'true');
target.classList.add('in');
target.setAttribute('aria-expanded', 'true');
target.style.height = 'auto';
} else {
panel.classList.add('collapsed');
panel.setAttribute('aria-expanded', 'false');
target.classList.remove('in');
target.setAttribute('aria-expanded', 'false');
target.style.height = '0px';
}
});
toggleAllBtn.textContent = isAllExpanded ? '收起全部' : '展开全部';
});
}
// 单个面板点击事件
panels.forEach(panel => {
panel.addEventListener('click', function() {
const isExpanded = this.getAttribute('aria-expanded') === 'true';
this.classList.toggle('collapsed');
this.setAttribute('aria-expanded', !isExpanded);
const target = document.querySelector(this.getAttribute('href'));
target.classList.toggle('in');
target.setAttribute('aria-expanded', !isExpanded);
target.style.height = isExpanded ? '0px' : 'auto';
// 旋转加号图标
const icon = this.querySelector('i');
icon.style.transform = isExpanded ? 'rotate(0deg)' : 'rotate(45deg)';
});
});
});
</script>
<?php
// 加载页脚
get_footer();
效果(二)
![图片[3]-zibll子比主题文章归档美化:可视化文章归档新体验[zibll子比美化]-狸狸库 - 网络资源收集与分享](https://liliku.oss-cn-chengdu.aliyuncs.com/wp-content/uploads/2025/05/image-79.png)
<?php
/**
* Template name: zibll-文章归档(2) Www.FuLiWu.Vip
* Description: A archives page for displaying article statistics and monthly updates.
*/
// 获取分类统计信息并缓存
function get_category_statistics() {
return get_cached_data('category_stats', function() {
$categories = get_categories(['hide_empty' => false]);
$data = [];
foreach ($categories as $category) {
$data[] = ['value' => $category->count, 'name' => $category->name];
}
return json_encode($data);
});
}
// 获取文章热力图数据并缓存
function get_heatmap_data() {
return get_cached_data('heatmap_data', function() {
global $wpdb;
// 使用SQL查询一次性获取所有必要的数据,以减少循环中的函数调用
$query = "
SELECT DATE(post_date) AS date, COUNT(*) AS count
FROM {$wpdb->posts}
WHERE post_type = 'post' AND post_status = 'publish'
GROUP BY DATE(post_date)
ORDER BY date ASC
";
$results = $wpdb->get_results($query, ARRAY_A);
// 填充缺失的日期
if (!empty($results)) {
$start_date = $results[0]['date'];
$end_date = end($results)['date'];
$current_date = strtotime($start_date);
$heatmap_data = [];
while (date('Y-m-d', $current_date) <= $end_date) {
$formatted_date = date('Y-m-d', $current_date);
$count = 0;
foreach ($results as $result) {
if ($result['date'] === $formatted_date) {
$count = $result['count'];
break;
}
}
$heatmap_data[] = [$formatted_date, $count];
$current_date = strtotime('+1 day', $current_date);
}
return json_encode($heatmap_data);
} else {
return json_encode([]);
}
});
}
// 获取用户统计数据并缓存
function get_user_vip_statistics() {
return get_cached_data('user_vip_stats', function() {
// 如果有更高效的获取会员级别的方式,请替换zib_get_user_vip_level()
$users = get_users(['fields' => ['ID']]);
$user_counts = [
'normal' => 0,
'vip_1' => 0,
'vip_2' => 0
];
foreach ($users as $user) {
$vip_level = zib_get_user_vip_level($user->ID);
switch ($vip_level) {
case 1:
$user_counts['vip_1']++;
break;
case 2:
$user_counts['vip_2']++;
break;
default:
$user_counts['normal']++;
break;
}
}
$chart_data = [
['value' => $user_counts['normal'], 'name' => '普通用户'],
['value' => $user_counts['vip_1'], 'name' => _pz('pay_user_vip_1_name')],
['value' => $user_counts['vip_2'], 'name' => _pz('pay_user_vip_2_name')]
];
return json_encode($chart_data);
});
}
// 使用瞬态API缓存数据以减少数据库查询次数
function get_cached_data($transient_key, $fetch_callback) {
if (false === ($data = get_transient($transient_key))) {
$data = call_user_func($fetch_callback);
set_transient($transient_key, $data, DAY_IN_SECONDS); // 缓存一天
}
return $data;
}
// 渲染小部件
function render_archives_widgets($type = 'day') {
// 初始化变量
$icons = [
'day' => ['icon' => 'fa fa-birthday-cake', 'color' => 'c-blue-2', 'title' => '运营时间'],
'post' => ['icon' => '#icon-post', 'color' => 'c-green', 'title' => '文章总量'],
'comment' => ['icon' => '#icon-comment-color', 'color' => 'c-yellow', 'title' => '评论总量'],
'user' => ['icon' => '#icon-user-color-2', 'color' => 'c-blue', 'title' => '注册用户']
];
// 根据传入的参数类型获取统计数据并构建HTML
switch ($type) {
case 'day':
// 尝试获取ID为1的用户注册时间作为运营时间起点
$first_user = get_userdata(1);
if ($first_user && !empty($first_user->user_registered)) {
$start_time = strtotime($first_user->user_registered);
} else {
// 如果获取不到用户1的数据,则回退到站点设置时间或者当前时间
$start_time = strtotime(get_option('siteorigin_setting_time')) ?: time();
}
$statistic = esc_html(floor((time() - $start_time) / (60 * 60 * 24))) . ' 天';
break;
case 'post':
$statistic = esc_html(wp_count_posts()->publish);
break;
case 'comment':
$approved_comments = get_comment_count()['approved'];
$pending_comments = get_comment_count()['moderated'];
$spam_comments = get_comment_count()['spam'];
$trash_comments = get_comment_count()['trash'];
$statistic = esc_html($approved_comments + $pending_comments + $spam_comments + $trash_comments);
break;
case 'user':
$statistic = esc_html(count_users()['total_users']);
break;
default:
return; // 如果类型不匹配,则不输出任何内容
}
// 输出HTML结构
echo '<div style="flex: 1;" class="zib-widget flex1">';
echo '<div class="muted-color em09 mb6">' . $icons[$type]['title'] . '统计</div>';
echo '<div class="flex jsb">';
echo '<span class="font-bold ' . $icons[$type]['color'] . ' em12">' . $statistic . '</span>';
if (strpos($icons[$type]['icon'], '#') === 0) {
// 使用SVG图标
echo '<svg class="em14 ' . $icons[$type]['color'] . '" aria-hidden="true"><use xlink:href="' . $icons[$type]['icon'] . '"></use></svg>';
} else {
// 使用Font Awesome图标
echo '<i class="' . $icons[$type]['icon'] . ' ' . $icons[$type]['color'] . ' em14"></i>';
}
echo '</div></div>';
}
// 在适当的地方调用这些函数以获取所需的数据
$json_data = get_category_statistics();
$json_heatmap_data = get_heatmap_data();
$json_chart_data = get_user_vip_statistics();
function Grace_archives_scripts() {
// 注册并加载ECharts库
wp_enqueue_script('echarts', 'https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js', array(), null, true);
// 注册自定义JS文件
wp_enqueue_script('archives-script', 'https://www.vxras.com/wp-content/themes/grace/assets/js/archives.js', array('echarts'), null, true);
// 使用wp_localize_script将PHP变量传递给JavaScript
$data_to_js = array(
'vipChartData' => json_decode(get_user_vip_statistics(), true),
'postChartData' => json_decode(get_category_statistics(), true),
'heatmapData' => json_decode(get_heatmap_data(), true)
);
wp_localize_script('archives-script', 'chartData', $data_to_js);
}
add_action('wp_enqueue_scripts', 'Grace_archives_scripts');
// 获取头部样式
get_header();
$post_id = get_queried_object_id();
$header_style = zib_get_page_header_style($post_id);
?>
<!-- 页面主体 -->
<main class="container">
<div class="content-wrap">
<div class="content-layout">
<?php if ($header_style != 1) { echo zib_get_page_header($post_id);} ?>
<div class="theme-box radius8">
<?php if ($header_style == 1) { echo zib_get_page_header($post_id);} ?>
<article>
<div id="post" class="zib-widget" style="height:450px;"></div>
<div id="time" class="zib-widget" style="height:300px;"></div>
<div class="zib-widget">
<div class="title-theme mb20">文章归档<div class="pull-right em09 mt3"><a class="but c-blue radius" href="javascript:;" id="toggleAll">展开全部</a></div></div>
<div data-nav="posts" class="theme-box wp-posts-content">
<?php
$previous_year = 0;
$previous_month = 0;
$collapse_id = 0;
// 获取所有文章
$myposts = get_posts('numberposts=-1&orderby=post_date&order=DESC');
foreach ($myposts as $post) :
setup_postdata($post);
$year = mysql2date('Y', $post->post_date);
$month = mysql2date('n', $post->post_date);
if ($year != $previous_year || $month != $previous_month) :
// 如果不是第一个月,则关闭上一个折叠面板
if ($collapse_id > 0) {
echo '</div></div></div>';
}
// 开始新的月份折叠面板
$collapse_id++;
echo '<div class="wp-block-zibllblock-collapse">';
echo '<div class="panel" data-theme="panel" data-isshow="false">';
echo '<div class="panel-heading collapsed" href="#collapse_' . esc_attr($collapse_id) . '" data-toggle="collapse" aria-controls="collapseExample" aria-expanded="false">';
echo '<i class="fa fa-plus"></i><strong class="biaoti">' . get_the_time('Y年n月') . '</strong>';
echo '</div>';
echo '<div class="collapse" id="collapse_' . esc_attr($collapse_id) . '" aria-expanded="false" style="height: 0px;">';
echo '<div class="panel-body">';
endif;
// 使用 add_shortcode_postsbox 函数输出单篇文章内容
echo do_shortcode('');
$previous_year = $year;
$previous_month = $month;
endforeach;
// 关闭最后一个折叠面板(如果有)
if ($collapse_id > 0) {
echo '</div></div></div>';
}
wp_reset_query();
wp_reset_postdata();
?>
</div>
</div>
</article>
</div>
<?php comments_template('/template/comments.php', true); ?>
</div>
</div>
<div class="sidebar">
<div class="zib-widget" id="vip-user" style="height: 400px;"></div>
<div class="flex ab jsb col-ml6 pointer">
<?php render_archives_widgets('day'); ?>
<?php render_archives_widgets('post'); ?>
</div>
<div class="flex ab jsb col-ml6 pointer">
<?php render_archives_widgets('comment'); ?>
<?php render_archives_widgets('user'); ?>
</div>
</div>
</main>
<script type="text/javascript">
</script>
<?php
// 加载页脚
get_footer();
© 版权声明
THE END
暂无评论内容