文章目录[隐藏]
WordPress小批量定制插件实现环保碳足迹追踪的教程
概述
在当今环保意识日益增强的时代,许多网站所有者希望在自己的WordPress网站上集成环保碳足迹追踪功能。本教程将指导您如何创建一个小批量定制插件,用于追踪和展示环保碳足迹数据。这个插件适合中小型网站使用,可以计算用户活动的碳排放量,并以可视化方式展示。
插件功能规划
我们的碳足迹追踪插件将包含以下核心功能:
- 用户活动数据收集(交通、能源使用等)
- 碳排放计算器
- 数据可视化展示
- 环保建议生成
- 数据导出功能
创建插件基础结构
首先,我们需要创建插件的基本文件和目录结构:
wp-content/plugins/carbon-footprint-tracker/
├── carbon-footprint-tracker.php
├── includes/
│ ├── class-data-collector.php
│ ├── class-carbon-calculator.php
│ ├── class-data-visualizer.php
│ └── class-export-handler.php
├── assets/
│ ├── css/
│ │ └── style.css
│ └── js/
│ └── script.js
└── templates/
└── dashboard.php
主插件文件
创建主插件文件 carbon-footprint-tracker.php:
<?php
/**
* Plugin Name: 环保碳足迹追踪器
* Plugin URI: https://example.com/carbon-footprint-tracker
* Description: 用于追踪和展示环保碳足迹数据的WordPress插件
* Version: 1.0.0
* Author: 环保开发者
* License: GPL v2 or later
* Text Domain: carbon-footprint-tracker
*/
// 防止直接访问
if (!defined('ABSPATH')) {
exit;
}
// 定义插件常量
define('CFT_VERSION', '1.0.0');
define('CFT_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('CFT_PLUGIN_URL', plugin_dir_url(__FILE__));
// 包含必要文件
require_once CFT_PLUGIN_DIR . 'includes/class-data-collector.php';
require_once CFT_PLUGIN_DIR . 'includes/class-carbon-calculator.php';
require_once CFT_PLUGIN_DIR . 'includes/class-data-visualizer.php';
require_once CFT_PLUGIN_DIR . 'includes/class-export-handler.php';
// 初始化插件类
class CarbonFootprintTracker {
private $data_collector;
private $carbon_calculator;
private $data_visualizer;
private $export_handler;
public function __construct() {
$this->init_components();
$this->register_hooks();
}
private function init_components() {
$this->data_collector = new CFT_Data_Collector();
$this->carbon_calculator = new CFT_Carbon_Calculator();
$this->data_visualizer = new CFT_Data_Visualizer();
$this->export_handler = new CFT_Export_Handler();
}
private function register_hooks() {
// 激活/停用插件时的操作
register_activation_hook(__FILE__, array($this, 'activate_plugin'));
register_deactivation_hook(__FILE__, array($this, 'deactivate_plugin'));
// 初始化
add_action('init', array($this, 'init_plugin'));
// 添加管理菜单
add_action('admin_menu', array($this, 'add_admin_menu'));
// 加载脚本和样式
add_action('wp_enqueue_scripts', array($this, 'enqueue_frontend_assets'));
add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_assets'));
}
public function activate_plugin() {
// 创建数据库表
$this->create_database_tables();
// 设置默认选项
$this->set_default_options();
}
public function deactivate_plugin() {
// 清理临时数据
// 注意:这里不删除用户数据,以便用户重新激活时保留历史记录
}
public function init_plugin() {
// 加载文本域
load_plugin_textdomain('carbon-footprint-tracker', false, dirname(plugin_basename(__FILE__)) . '/languages');
}
public function add_admin_menu() {
add_menu_page(
'碳足迹追踪',
'碳足迹追踪',
'manage_options',
'carbon-footprint-tracker',
array($this, 'render_admin_dashboard'),
'dashicons-chart-area',
30
);
}
public function enqueue_frontend_assets() {
wp_enqueue_style(
'cft-frontend-style',
CFT_PLUGIN_URL . 'assets/css/style.css',
array(),
CFT_VERSION
);
wp_enqueue_script(
'cft-frontend-script',
CFT_PLUGIN_URL . 'assets/js/script.js',
array('jquery', 'chart-js'),
CFT_VERSION,
true
);
// 本地化脚本,传递数据到JavaScript
wp_localize_script('cft-frontend-script', 'cft_ajax', array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('cft_nonce')
));
}
public function enqueue_admin_assets($hook) {
if ('toplevel_page_carbon-footprint-tracker' !== $hook) {
return;
}
wp_enqueue_style(
'cft-admin-style',
CFT_PLUGIN_URL . 'assets/css/admin-style.css',
array(),
CFT_VERSION
);
// 引入Chart.js用于数据可视化
wp_enqueue_script(
'chart-js',
'https://cdn.jsdelivr.net/npm/chart.js',
array(),
'3.7.0',
true
);
wp_enqueue_script(
'cft-admin-script',
CFT_PLUGIN_URL . 'assets/js/admin-script.js',
array('jquery', 'chart-js'),
CFT_VERSION,
true
);
}
public function render_admin_dashboard() {
include CFT_PLUGIN_DIR . 'templates/dashboard.php';
}
private function create_database_tables() {
global $wpdb;
$table_name = $wpdb->prefix . 'carbon_footprint_data';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
user_id mediumint(9),
activity_type varchar(100) NOT NULL,
activity_data text NOT NULL,
carbon_emission decimal(10,2) NOT NULL,
calculation_date datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
private function set_default_options() {
$default_options = array(
'transportation_factors' => array(
'car' => 0.12, // kg CO2 per km
'bus' => 0.03,
'train' => 0.05,
'plane' => 0.18,
'bicycle' => 0,
'walking' => 0
),
'energy_factors' => array(
'electricity' => 0.5, // kg CO2 per kWh
'natural_gas' => 2.0,
'heating_oil' => 2.7
),
'measurement_unit' => 'kg',
'show_tips' => true,
'data_retention_days' => 365
);
update_option('cft_settings', $default_options);
}
}
// 初始化插件
$carbon_footprint_tracker = new CarbonFootprintTracker();
碳排放计算器类
创建 includes/class-carbon-calculator.php:
<?php
/**
* 碳排放计算器类
* 负责计算各种活动的碳排放量
*/
class CFT_Carbon_Calculator {
private $settings;
public function __construct() {
$this->settings = get_option('cft_settings', array());
}
/**
* 计算交通碳排放
*
* @param string $transport_type 交通类型
* @param float $distance 距离(公里)
* @param int $passengers 乘客数量(用于分摊排放)
* @return float 碳排放量(kg)
*/
public function calculate_transport_emission($transport_type, $distance, $passengers = 1) {
$factors = isset($this->settings['transportation_factors']) ?
$this->settings['transportation_factors'] : array();
if (!isset($factors[$transport_type])) {
return 0;
}
$emission = $factors[$transport_type] * $distance;
// 如果有多名乘客,分摊排放量
if ($passengers > 1) {
$emission = $emission / $passengers;
}
return round($emission, 2);
}
/**
* 计算能源使用碳排放
*
* @param string $energy_type 能源类型
* @param float $consumption 消耗量
* @param string $unit 单位(kWh, m³等)
* @return float 碳排放量(kg)
*/
public function calculate_energy_emission($energy_type, $consumption, $unit = 'kWh') {
$factors = isset($this->settings['energy_factors']) ?
$this->settings['energy_factors'] : array();
if (!isset($factors[$energy_type])) {
return 0;
}
// 单位转换(如果需要)
$converted_consumption = $this->convert_energy_unit($consumption, $unit);
$emission = $factors[$energy_type] * $converted_consumption;
return round($emission, 2);
}
/**
* 计算日常活动碳排放
*
* @param string $activity 活动类型
* @param array $data 活动数据
* @return float 碳排放量(kg)
*/
public function calculate_daily_activity_emission($activity, $data) {
$emission = 0;
switch ($activity) {
case 'diet':
// 饮食碳排放计算
$emission = $this->calculate_diet_emission($data);
break;
case 'shopping':
// 购物碳排放计算
$emission = $this->calculate_shopping_emission($data);
break;
case 'waste':
// 废弃物碳排放计算
$emission = $this->calculate_waste_emission($data);
break;
}
return round($emission, 2);
}
/**
* 计算饮食碳排放
*/
private function calculate_diet_emission($data) {
$diet_factors = array(
'meat_heavy' => 7.0, // kg CO2 per day
'balanced' => 4.0,
'vegetarian' => 3.0,
'vegan' => 2.0
);
$diet_type = isset($data['diet_type']) ? $data['diet_type'] : 'balanced';
return isset($diet_factors[$diet_type]) ? $diet_factors[$diet_type] : 4.0;
}
/**
* 计算购物碳排放
*/
private function calculate_shopping_emission($data) {
// 简化的购物碳排放计算
// 实际应用中可能需要更复杂的计算
$emission = 0;
if (isset($data['clothing_kg'])) {
$emission += $data['clothing_kg'] * 15; // 每公斤衣物约15kg CO2
}
if (isset($data['electronics_count'])) {
$emission += $data['electronics_count'] * 50; // 每件电子产品约50kg CO2
}
return $emission;
}
/**
* 计算废弃物碳排放
*/
private function calculate_waste_emission($data) {
$waste_factors = array(
'landfill' => 1.0, // kg CO2 per kg waste
'recycled' => 0.1,
'composted' => 0.05
);
$emission = 0;
foreach ($data as $waste_type => $amount_kg) {
if (isset($waste_factors[$waste_type])) {
$emission += $waste_factors[$waste_type] * $amount_kg;
}
}
return $emission;
}
/**
* 单位转换
*/
private function convert_energy_unit($value, $unit) {
switch ($unit) {
case 'm³': // 天然气立方米转kWh
return $value * 10.55;
case 'liter': // 燃油升转kWh
return $value * 10.0;
default:
return $value;
}
}
/**
* 获取环保建议
*
* @param float $total_emission 总排放量
* @param array $breakdown 排放细分
* @return array 建议列表
*/
public function get_eco_tips($total_emission, $breakdown) {
$tips = array();
// 根据排放量给出建议
if ($total_emission > 20) {
$tips[] = "您的碳足迹较高,建议减少私家车使用,多使用公共交通。";
}
if (isset($breakdown['transport']) && $breakdown['transport'] > 10) {
$tips[] = "交通排放占比较大,考虑拼车、使用公共交通或自行车出行。";
}
if (isset($breakdown['energy']) && $breakdown['energy'] > 5) {
$tips[] = "能源消耗较高,建议使用节能电器,关闭不必要的电源。";
}
if (isset($breakdown['diet']) && $breakdown['diet'] > 5) {
$tips[] = "考虑增加植物性饮食比例,减少肉类消费。";
}
if (count($tips) === 0) {
$tips[] = "您的碳足迹表现良好!继续保持环保生活方式。";
}
return $tips;
}
}
数据收集器类
创建 includes/class-data-collector.php:
<?php
/**
* 数据收集器类
* 负责收集和存储用户碳足迹数据
*/
class CFT_Data_Collector {
/**
* 保存用户活动数据
*
* @param int $user_id 用户ID(0表示匿名用户)
* @param string $activity_type 活动类型
* @param array $activity_data 活动数据
* @param float $carbon_emission 碳排放量
* @return int|false 插入ID或false
*/
public function save_activity($user_id, $activity_type, $activity_data, $carbon_emission) {
global $wpdb;
$table_name = $wpdb->prefix . 'carbon_footprint_data';
$result = $wpdb->insert(
$table_name,
array(
'user_id' => $user_id,
'activity_type' => $activity_type,
'activity_data' => json_encode($activity_data),
'carbon_emission' => $carbon_emission,
'calculation_date' => current_time('mysql')
),
array('%d', '%s', '%s', '%f', '%s')
);
return $result ? $wpdb->insert_id : false;
}
/**
* 获取用户碳足迹数据
*
* @param int $user_id 用户ID
* @param string $period 时间周期(day, week, month, year)
* @param string $activity_type 活动类型(可选)
* @return array 碳足迹数据
*/
public function get_user_footprint($user_id, $period = 'month', $activity_type = null) {
global $wpdb;
$table_name = $wpdb->prefix . 'carbon_footprint_data';
// 根据时间周期设置日期范围
$date_range = $this->get_date_range($period);
$query = "SELECT * FROM $table_name
WHERE user_id = %d
AND calculation_date >= %s
AND calculation_date <= %s";
$params = array($user_id, $date_range['start'], $date_range['end']);
if ($activity_type) {
$query .= " AND activity_type = %s";
$params[] = $activity_type;
}
$query .= " ORDER BY calculation_date DESC";
$results = $wpdb->get_results(
$wpdb->prepare($query, $params),
ARRAY_A
);
// 解析JSON数据
foreach ($results as &$row) {
$row['activity_data'] = json_decode($row['activity_data'], true);
}
return $results;
}
/**
* 获取汇总统计数据
*
* @param int $user_id 用户ID
* @param string $period 时间周期
* @return array 汇总数据
*/
public function get_summary_stats($user_id, $period = 'month') {
global $wpdb;
$table_name = $wpdb->prefix . 'carbon_footprint_data';
$date_range = $this->get_date_range($period);
数据收集器类(续)
/**
* 获取汇总统计数据
*
* @param int $user_id 用户ID
* @param string $period 时间周期
* @return array 汇总数据
*/
public function get_summary_stats($user_id, $period = 'month') {
global $wpdb;
$table_name = $wpdb->prefix . 'carbon_footprint_data';
$date_range = $this->get_date_range($period);
// 获取总排放量
$total_query = "SELECT SUM(carbon_emission) as total FROM $table_name
WHERE user_id = %d
AND calculation_date >= %s
AND calculation_date <= %s";
$total_result = $wpdb->get_row(
$wpdb->prepare($total_query, array($user_id, $date_range['start'], $date_range['end']))
);
// 按活动类型分组统计
$breakdown_query = "SELECT activity_type, SUM(carbon_emission) as total
FROM $table_name
WHERE user_id = %d
AND calculation_date >= %s
AND calculation_date <= %s
GROUP BY activity_type";
$breakdown_results = $wpdb->get_results(
$wpdb->prepare($breakdown_query, array($user_id, $date_range['start'], $date_range['end'])),
ARRAY_A
);
// 格式化分组数据
$breakdown = array();
foreach ($breakdown_results as $row) {
$breakdown[$row['activity_type']] = floatval($row['total']);
}
// 获取趋势数据(最近7天)
$trend_query = "SELECT DATE(calculation_date) as date,
SUM(carbon_emission) as daily_total
FROM $table_name
WHERE user_id = %d
AND calculation_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
GROUP BY DATE(calculation_date)
ORDER BY date ASC";
$trend_results = $wpdb->get_results(
$wpdb->prepare($trend_query, array($user_id)),
ARRAY_A
);
return array(
'total_emission' => $total_result ? floatval($total_result->total) : 0,
'breakdown' => $breakdown,
'trend' => $trend_results,
'period' => $period,
'date_range' => $date_range
);
}
/**
* 获取日期范围
*/
private function get_date_range($period) {
$end_date = current_time('mysql');
switch ($period) {
case 'day':
$start_date = date('Y-m-d H:i:s', strtotime('-1 day'));
break;
case 'week':
$start_date = date('Y-m-d H:i:s', strtotime('-1 week'));
break;
case 'year':
$start_date = date('Y-m-d H:i:s', strtotime('-1 year'));
break;
case 'month':
default:
$start_date = date('Y-m-d H:i:s', strtotime('-1 month'));
break;
}
return array(
'start' => $start_date,
'end' => $end_date
);
}
/**
* 获取所有用户的汇总数据(管理员功能)
*/
public function get_all_users_summary($period = 'month') {
global $wpdb;
$table_name = $wpdb->prefix . 'carbon_footprint_data';
$date_range = $this->get_date_range($period);
$query = "SELECT user_id,
SUM(carbon_emission) as total_emission,
COUNT(*) as activity_count
FROM $table_name
WHERE calculation_date >= %s
AND calculation_date <= %s
GROUP BY user_id
ORDER BY total_emission DESC";
return $wpdb->get_results(
$wpdb->prepare($query, array($date_range['start'], $date_range['end'])),
ARRAY_A
);
}
}
数据可视化类
创建 includes/class-data-visualizer.php:
<?php
/**
* 数据可视化类
* 负责生成碳足迹数据的可视化图表
*/
class CFT_Data_Visualizer {
/**
* 生成排放量饼图数据
*/
public function generate_pie_chart_data($breakdown_data) {
$labels = array();
$data = array();
$background_colors = array();
$border_colors = array();
// 预定义颜色
$colors = array(
array('bg' => 'rgba(255, 99, 132, 0.7)', 'border' => 'rgba(255, 99, 132, 1)'),
array('bg' => 'rgba(54, 162, 235, 0.7)', 'border' => 'rgba(54, 162, 235, 1)'),
array('bg' => 'rgba(255, 206, 86, 0.7)', 'border' => 'rgba(255, 206, 86, 1)'),
array('bg' => 'rgba(75, 192, 192, 0.7)', 'border' => 'rgba(75, 192, 192, 1)'),
array('bg' => 'rgba(153, 102, 255, 0.7)', 'border' => 'rgba(153, 102, 255, 1)'),
array('bg' => 'rgba(255, 159, 64, 0.7)', 'border' => 'rgba(255, 159, 64, 1)')
);
$color_index = 0;
foreach ($breakdown_data as $category => $value) {
// 美化分类名称
$pretty_names = array(
'transport' => '交通出行',
'energy' => '能源消耗',
'diet' => '饮食消费',
'shopping' => '购物消费',
'waste' => '废弃物处理'
);
$label = isset($pretty_names[$category]) ? $pretty_names[$category] : $category;
$labels[] = $label . ' (' . $value . 'kg)';
$data[] = $value;
// 分配颜色
$background_colors[] = $colors[$color_index]['bg'];
$border_colors[] = $colors[$color_index]['border'];
$color_index = ($color_index + 1) % count($colors);
}
return array(
'labels' => $labels,
'datasets' => array(
array(
'data' => $data,
'backgroundColor' => $background_colors,
'borderColor' => $border_colors,
'borderWidth' => 1
)
)
);
}
/**
* 生成趋势折线图数据
*/
public function generate_line_chart_data($trend_data) {
$labels = array();
$data = array();
foreach ($trend_data as $day) {
$labels[] = date('m/d', strtotime($day['date']));
$data[] = floatval($day['daily_total']);
}
return array(
'labels' => $labels,
'datasets' => array(
array(
'label' => '每日碳排放 (kg)',
'data' => $data,
'borderColor' => 'rgba(75, 192, 192, 1)',
'backgroundColor' => 'rgba(75, 192, 192, 0.2)',
'fill' => true,
'tension' => 0.4
)
)
);
}
/**
* 生成对比柱状图数据
*/
public function generate_comparison_chart_data($user_data, $average_data) {
$categories = array('交通', '能源', '饮食', '购物', '废弃物');
return array(
'labels' => $categories,
'datasets' => array(
array(
'label' => '您的排放',
'data' => $user_data,
'backgroundColor' => 'rgba(54, 162, 235, 0.7)',
'borderColor' => 'rgba(54, 162, 235, 1)',
'borderWidth' => 1
),
array(
'label' => '平均排放',
'data' => $average_data,
'backgroundColor' => 'rgba(255, 99, 132, 0.7)',
'borderColor' => 'rgba(255, 99, 132, 1)',
'borderWidth' => 1
)
)
);
}
/**
* 生成环保成就徽章
*/
public function generate_achievement_badges($total_emission, $period) {
$badges = array();
// 根据排放量判断成就
if ($total_emission < 5) {
$badges[] = array(
'name' => '环保先锋',
'description' => '月度碳排放低于5kg',
'icon' => '🌿',
'color' => 'green'
);
}
if ($total_emission < 10) {
$badges[] = array(
'name' => '低碳达人',
'description' => '月度碳排放低于10kg',
'icon' => '🚲',
'color' => 'blue'
);
}
// 检查是否有连续低碳记录
$badges[] = array(
'name' => '持续行动者',
'description' => '连续记录碳足迹超过30天',
'icon' => '📅',
'color' => 'purple'
);
return $badges;
}
/**
* 渲染图表HTML
*/
public function render_chart_html($chart_id, $chart_type, $chart_data, $options = array()) {
$default_options = array(
'height' => 300,
'width' => 400
);
$options = wp_parse_args($options, $default_options);
ob_start();
?>
<div class="cft-chart-container">
<canvas
id="<?php echo esc_attr($chart_id); ?>"
width="<?php echo esc_attr($options['width']); ?>"
height="<?php echo esc_attr($options['height']); ?>"
data-chart-type="<?php echo esc_attr($chart_type); ?>"
data-chart-data='<?php echo json_encode($chart_data); ?>'
></canvas>
</div>
<?php
return ob_get_clean();
}
}
数据导出处理器
创建 includes/class-export-handler.php:
<?php
/**
* 数据导出处理器类
* 负责处理碳足迹数据的导出功能
*/
class CFT_Export_Handler {
/**
* 导出数据为CSV格式
*/
public function export_to_csv($user_id, $period = 'month') {
global $wpdb;
$data_collector = new CFT_Data_Collector();
$carbon_calculator = new CFT_Carbon_Calculator();
// 获取用户数据
$footprint_data = $data_collector->get_user_footprint($user_id, $period);
$summary = $data_collector->get_summary_stats($user_id, $period);
// 生成CSV内容
$csv_content = "碳足迹追踪报告n";
$csv_content .= "生成时间: " . current_time('Y-m-d H:i:s') . "n";
$csv_content .= "统计周期: " . $period . "n";
$csv_content .= "总排放量: " . $summary['total_emission'] . " kg CO2nn";
$csv_content .= "活动明细:n";
$csv_content .= "日期,活动类型,详细数据,碳排放量(kg)n";
foreach ($footprint_data as $row) {
$date = date('Y-m-d H:i', strtotime($row['calculation_date']));
$activity_data = is_array($row['activity_data']) ?
json_encode($row['activity_data'], JSON_UNESCAPED_UNICODE) :
$row['activity_data'];
$csv_content .= sprintf(
'%s,%s,%s,%.2f',
$date,
$row['activity_type'],
$activity_data,
$row['carbon_emission']
) . "n";
}
// 添加汇总数据
$csv_content .= "n分类汇总:n";
$csv_content .= "分类,排放量(kg),占比n";
$total = $summary['total_emission'];
foreach ($summary['breakdown'] as $category => $emission) {
$percentage = $total > 0 ? ($emission / $total * 100) : 0;
$csv_content .= sprintf(
'%s,%.2f,%.1f%%',
$category,
$emission,
$percentage
) . "n";
}
// 添加环保建议
$tips = $carbon_calculator->get_eco_tips($total, $summary['breakdown']);
$csv_content .= "n环保建议:n";
foreach ($tips as $index => $tip) {
$csv_content .= ($index + 1) . ". " . $tip . "n";
}
return $csv_content;
}
/**
* 导出数据为JSON格式
*/
public function export_to_json($user_id, $period = 'month') {
$data_collector = new CFT_Data_Collector();
$carbon_calculator = new CFT_Carbon_Calculator();
$footprint_data = $data_collector->get_user_footprint($user_id, $period);
$summary = $data_collector->get_summary_stats($user_id, $period);
$export_data = array(
'metadata' => array(
'export_date' => current_time('c'),
'period' => $period,
'user_id' => $user_id
),
'summary' => $summary,
'detailed_records' => $footprint_data,
'eco_tips' => $carbon_calculator->get_eco_tips(
$summary['total_emission'],
$summary['breakdown']
)
);
return json_encode($export_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
}
/**
* 处理导出请求
*/
public function handle_export_request() {
if (!isset($_GET['cft_export']) || !wp_verify_nonce($_GET['nonce'], 'cft_export_nonce')) {
return;
}
$user_id = get_current_user_id();
$format = isset($_GET['format']) ? sanitize_text_field($_GET['format']) : 'csv';
$period = isset($_GET['period']) ? sanitize_text_field($_GET['period']) : 'month';
switch ($format) {
case 'json':
$content = $this->export_to_json($user_id, $period);
$filename = 'carbon-footprint-' . date('Y-m-d') . '.json';
$content_type = 'application/json';
break;
case 'csv':
default:
$content = $this->export_to_csv($user_id, $period);
$filename = 'carbon-footprint-' . date('Y-m-d') . '.csv';
$content_type = 'text/csv';
break;
}
// 设置HTTP头,触发文件下载
header('Content-Type: ' . $content_type);
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Length: ' . strlen($content));
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
echo $content;
exit;
}
}
前端界面模板
创建 templates/dashboard.php:
<?php
/**
* 管理面板模板
*/
if (!current_user_can('manage_options')) {
wp_die('您没有权限访问此页面。');
}
$data_collector = new CFT_Data_Collector();
$carbon_calculator = new CFT_Carbon_Calculator();
$data_visualizer = new CFT_Data_Visualizer();
// 获取当前用户数据
$user_id = get_current_user_id();
$summary = $data_collector->get_summary_stats($user_id, 'month');
$tips = $carbon_calculator->get_eco_tips($summary['total_emission'], $summary['breakdown']);
$badges = $data_visualizer->generate_achievement_badges($summary['total_emission'], 'month');
// 生成图表数据
$pie_chart_data = $data_visualizer->generate_pie_chart_data($summary['breakdown']);
$line_chart_data = $data_visualizer->generate_line_chart_data($summary['trend']);
?>
<div class="wrap cft-dashboard">
<h1>环保碳足迹追踪器</h1>
<div class="cft-stats-summary">
<div class="cft-stat-card">
<h3>本月总排放</h3>
<div class="cft-stat-value"><?php echo number_format($summary['total_emission'], 2); ?> kg</div>
<p>二氧化碳当量</p>
</div>
<div class="cft-stat-card">
<h3>活动记录</h3>
