文章目录[隐藏]
WordPress文创插件实现柔性产品线规划的详细教程
引言:文创产品线规划的挑战与机遇
在当今文创产业快速发展的时代,如何高效管理多样化的产品线成为许多文创企业的核心挑战。传统产品管理方式往往难以适应文创产品快速迭代、个性化定制和灵活调整的需求。本文将详细介绍如何通过WordPress插件实现柔性产品线规划,帮助文创企业构建灵活、可扩展的产品管理体系。
什么是柔性产品线规划?
柔性产品线规划是一种能够快速响应市场变化、支持产品多样化配置的管理方法。它允许企业:
- 根据市场需求快速调整产品组合
- 支持个性化产品定制
- 实现产品模块化组合
- 降低库存风险和成本
准备工作:环境与工具配置
在开始之前,请确保您的WordPress环境满足以下要求:
- WordPress 5.0或更高版本
- PHP 7.2或更高版本
- MySQL 5.6或更高版本
- 至少256MB PHP内存限制
核心插件开发:柔性产品管理系统
1. 插件基础结构
<?php
/**
* Plugin Name: 文创柔性产品线管理器
* Plugin URI: https://yourwebsite.com/
* Description: 为文创企业提供柔性产品线规划和管理功能
* Version: 1.0.0
* Author: 您的名称
* License: GPL v2 or later
*/
// 防止直接访问
if (!defined('ABSPATH')) {
exit;
}
// 定义插件常量
define('FPP_VERSION', '1.0.0');
define('FPP_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('FPP_PLUGIN_URL', plugin_dir_url(__FILE__));
// 初始化插件
add_action('init', 'fpp_initialize_plugin');
function fpp_initialize_plugin() {
// 加载必要文件
require_once FPP_PLUGIN_DIR . 'includes/class-product-manager.php';
require_once FPP_PLUGIN_DIR . 'includes/class-module-manager.php';
require_once FPP_PLUGIN_DIR . 'includes/class-configurator.php';
// 初始化组件
new FPP_Product_Manager();
new FPP_Module_Manager();
new FPP_Configurator();
}
?>
2. 产品自定义类型与分类
<?php
/**
* 产品管理类
* 负责处理文创产品的自定义类型和分类
*/
class FPP_Product_Manager {
public function __construct() {
add_action('init', array($this, 'register_product_post_type'));
add_action('init', array($this, 'register_product_taxonomies'));
}
/**
* 注册文创产品自定义文章类型
*/
public function register_product_post_type() {
$labels = array(
'name' => '文创产品',
'singular_name' => '文创产品',
'menu_name' => '产品管理',
'add_new' => '添加新产品',
'add_new_item' => '添加新文创产品',
'edit_item' => '编辑产品',
'new_item' => '新产品',
'view_item' => '查看产品',
'search_items' => '搜索产品',
'not_found' => '未找到产品',
'not_found_in_trash' => '回收站中无产品'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => 'cultural-product'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'menu_icon' => 'dashicons-palmtree',
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'show_in_rest' => true // 支持Gutenberg编辑器
);
register_post_type('cultural_product', $args);
}
/**
* 注册产品分类法
*/
public function register_product_taxonomies() {
// 产品系列分类
register_taxonomy(
'product_series',
'cultural_product',
array(
'label' => '产品系列',
'rewrite' => array('slug' => 'series'),
'hierarchical' => true,
'show_admin_column' => true,
'show_in_rest' => true
)
);
// 产品标签
register_taxonomy(
'product_tag',
'cultural_product',
array(
'label' => '产品标签',
'rewrite' => array('slug' => 'product-tag'),
'hierarchical' => false,
'show_admin_column' => true,
'show_in_rest' => true
)
);
}
}
?>
3. 模块化产品组件系统
<?php
/**
* 模块管理器
* 处理产品的模块化组件
*/
class FPP_Module_Manager {
private $modules_table;
public function __construct() {
global $wpdb;
$this->modules_table = $wpdb->prefix . 'fpp_product_modules';
// 创建数据库表
register_activation_hook(__FILE__, array($this, 'create_modules_table'));
// 添加管理菜单
add_action('admin_menu', array($this, 'add_admin_menu'));
}
/**
* 创建模块数据库表
*/
public function create_modules_table() {
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS {$this->modules_table} (
id mediumint(9) NOT NULL AUTO_INCREMENT,
module_name varchar(100) NOT NULL,
module_type varchar(50) NOT NULL,
module_description text,
module_price decimal(10,2) DEFAULT 0.00,
module_image varchar(255),
compatibility text,
is_active tinyint(1) DEFAULT 1,
created_at datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
/**
* 添加模块管理菜单
*/
public function add_admin_menu() {
add_submenu_page(
'edit.php?post_type=cultural_product',
'产品模块管理',
'模块管理',
'manage_options',
'fpp-modules',
array($this, 'render_modules_page')
);
}
/**
* 渲染模块管理页面
*/
public function render_modules_page() {
?>
<div class="wrap">
<h1>文创产品模块管理</h1>
<div id="fpp-modules-container">
<!-- 模块管理界面将通过JavaScript动态加载 -->
<p>模块管理功能加载中...</p>
</div>
</div>
<script>
// 模块管理前端逻辑
document.addEventListener('DOMContentLoaded', function() {
// 这里可以添加AJAX请求来加载和操作模块数据
console.log('模块管理界面已加载');
});
</script>
<?php
}
/**
* 获取所有可用模块
* @return array 模块列表
*/
public function get_all_modules() {
global $wpdb;
$modules = $wpdb->get_results(
"SELECT * FROM {$this->modules_table} WHERE is_active = 1 ORDER BY module_type, module_name"
);
return $modules;
}
}
?>
4. 产品配置器前端实现
/**
* 产品配置器前端脚本
* 允许用户可视化配置文创产品
*/
(function($) {
'use strict';
// 产品配置器类
class ProductConfigurator {
constructor(productId, container) {
this.productId = productId;
this.container = container;
this.selectedModules = [];
this.totalPrice = 0;
this.basePrice = 0;
this.init();
}
// 初始化配置器
init() {
this.loadProductData();
this.setupEventListeners();
}
// 加载产品数据
loadProductData() {
const self = this;
$.ajax({
url: fpp_ajax.ajax_url,
type: 'POST',
data: {
action: 'fpp_get_product_data',
product_id: this.productId,
nonce: fpp_ajax.nonce
},
success: function(response) {
if (response.success) {
self.basePrice = response.data.base_price;
self.renderProductConfigurator(response.data);
}
}
});
}
// 渲染配置器界面
renderProductConfigurator(productData) {
let html = `
<div class="fpp-configurator">
<div class="configurator-header">
<h2>${productData.title} - 产品配置器</h2>
<div class="price-display">
基础价格: ¥${this.basePrice.toFixed(2)}
<span class="total-price">总计: ¥${this.totalPrice.toFixed(2)}</span>
</div>
</div>
<div class="configurator-body">
<div class="modules-section">
<h3>可选模块</h3>
<div class="modules-grid" id="modules-container">
<!-- 模块将通过JavaScript动态添加 -->
</div>
</div>
<div class="selected-section">
<h3>已选配置</h3>
<div class="selected-modules" id="selected-modules">
<!-- 已选模块将在这里显示 -->
</div>
</div>
</div>
<div class="configurator-actions">
<button class="button button-primary" id="save-configuration">保存配置</button>
<button class="button" id="reset-configuration">重置</button>
</div>
</div>
`;
this.container.html(html);
this.renderAvailableModules(productData.modules);
}
// 渲染可用模块
renderAvailableModules(modules) {
const container = $('#modules-container');
modules.forEach(module => {
const moduleHtml = `
<div class="module-card" data-module-id="${module.id}">
<div class="module-image">
${module.image ? `<img src="${module.image}" alt="${module.name}">` : ''}
</div>
<div class="module-info">
<h4>${module.name}</h4>
<p class="module-description">${module.description}</p>
<p class="module-price">¥${module.price.toFixed(2)}</p>
<button class="button add-module-btn" data-module-id="${module.id}">
添加到配置
</button>
</div>
</div>
`;
container.append(moduleHtml);
});
}
// 设置事件监听器
setupEventListeners() {
const self = this;
// 委托事件处理,提高性能
this.container.on('click', '.add-module-btn', function() {
const moduleId = $(this).data('module-id');
self.addModule(moduleId);
});
$('#save-configuration').on('click', function() {
self.saveConfiguration();
});
$('#reset-configuration').on('click', function() {
self.resetConfiguration();
});
}
// 添加模块到配置
addModule(moduleId) {
// 这里添加模块选择逻辑
console.log(`添加模块: ${moduleId}`);
this.updateTotalPrice();
}
// 更新总价
updateTotalPrice() {
// 计算总价逻辑
this.totalPrice = this.basePrice + this.calculateModulesPrice();
$('.total-price').text(`总计: ¥${this.totalPrice.toFixed(2)}`);
}
// 计算模块总价
calculateModulesPrice() {
return this.selectedModules.reduce((total, module) => {
return total + module.price;
}, 0);
}
// 保存配置
saveConfiguration() {
const configuration = {
productId: this.productId,
modules: this.selectedModules,
totalPrice: this.totalPrice,
timestamp: new Date().toISOString()
};
// 发送保存请求
$.ajax({
url: fpp_ajax.ajax_url,
type: 'POST',
data: {
action: 'fpp_save_configuration',
configuration: JSON.stringify(configuration),
nonce: fpp_ajax.nonce
},
success: function(response) {
if (response.success) {
alert('配置保存成功!');
}
}
});
}
// 重置配置
resetConfiguration() {
this.selectedModules = [];
this.totalPrice = this.basePrice;
this.updateTotalPrice();
$('#selected-modules').empty();
}
}
// 初始化配置器
$(document).ready(function() {
if ($('#fpp-product-configurator').length) {
const productId = $('#fpp-product-configurator').data('product-id');
const configurator = new ProductConfigurator(
productId,
$('#fpp-product-configurator')
);
}
});
})(jQuery);
高级功能:智能推荐与库存管理
1. 智能推荐算法实现
<?php
/**
* 智能推荐系统
* 基于用户行为和产品属性推荐相关模块
*/
class FPP_Recommendation_System {
/**
* 根据当前配置推荐兼容模块
* @param array $selectedModules 已选模块
* @param int $productId 产品ID
* @return array 推荐模块列表
*/
public function get_recommendations($selectedModules, $productId) {
$recommendations = array();
// 基于协同过滤的推荐逻辑
if (!empty($selectedModules)) {
$moduleIds = array_column($selectedModules, 'id');
$recommendations = $this->get_collaborative_recommendations($moduleIds);
}
// 基于产品属性的推荐
$productBased = $this->get_product_based_recommendations($productId);
// 合并推荐结果,去除重复
$allRecommendations = array_merge($recommendations, $productBased);
$uniqueRecommendations = $this->remove_duplicates($allRecommendations);
// 按推荐分数排序
usort($uniqueRecommendations, function($a, $b) {
return $b['score'] <=> $a['score'];
});
return array_slice($uniqueRecommendations, 0, 5); // 返回前5个推荐
}
/**
* 协同过滤推荐
*/
private function get_collaborative_recommendations($moduleIds) {
global $wpdb;
// 简化版协同过滤算法
// 实际应用中可能需要更复杂的算法和更大的数据集
$placeholders = implode(',', array_fill(0, count($moduleIds), '%d'));
$query = $wpdb->prepare(
"SELECT m.*, COUNT(*) as frequency
FROM {$wpdb->prefix}fpp_module_combinations mc
JOIN {$wpdb->prefix}fpp_product_modules m ON mc.recommended_module_id = m.id
WHERE mc.base_module_id IN ($placeholders)
AND m.is_active = 1
GROUP BY mc.recommended_module_id
ORDER BY frequency DESC
LIMIT 10",
$moduleIds
);
return $wpdb->get_results($query, ARRAY_A);
}
}
?>
2. 实时库存管理系统
<?php
/**
* 库存管理类
* 跟踪模块库存和可用性
*/
class FPP_Inventory_Manager {
/**
* 检查模块可用性
* @param int $moduleId 模块ID
* @param int $quantity 所需数量
* @return array 可用性状态
*/
public function check_availability($moduleId, $quantity = 1) {
global $wpdb;
$inventory_table = $wpdb->prefix . 'fpp_inventory';
$stock = $wpdb->get_var($wpdb->prepare(
"SELECT current_stock FROM {$inventory_table} WHERE module_id = %d",
$moduleId
));
if ($stock === null) {
return array(
'available' => true, // 如果没有库存记录,假设无限供应
'stock' => null,
'message' => ''
);
}
$available = $stock >= $quantity;
return array(
'available' => $available,
'stock' => $stock,
'message' => $available ?
"库存充足 ({$stock} 件可用)" :
"库存不足 (仅剩 {$stock} 件)"
);
}
/**
* 更新库存
* @param int $moduleId 模块ID
* @param int $quantity 变化数量(正数为入库,负数为出库)
* @return bool 是否成功
*/
public function update_stock($moduleId, $quantity) {
global $wpdb;
$inventory_table = $wpdb->prefix . 'fpp_inventory';
// 使用原子操作更新库存,避免并发问题
$result = $wpdb->query($wpdb->prepare(
"INSERT INTO {$inventory_table} (module_id, current_stock)
VALUES (%d, %d)
ON DUPLICATE KEY UPDATE
current_stock = current_stock + VALUES(current_stock)",
$moduleId,
$quantity
));
// 记录库存变更历史
if ($result !== false) {
$this->log_inventory_change($moduleId, $quantity, 'manual_adjustment');
}
return $result !== false;
}
/**
* 记录库存变更历史
*/
private function log_inventory_change($moduleId, $quantity, $reason) {
global $wpdb;
$log_table = $wpdb->prefix . 'fpp_inventory_log';
$wpdb->insert(
$log_table,
array(
'module_id' => $moduleId,
'quantity_change' => $quantity,
'reason' => $reason,
'changed_by' => get_current_user_id(),
'change_date' => current_time('mysql')
),
array('%d', '%d', '%s', '%d', '%s')
);
}
}
?>
## 数据可视化与报表系统
### 1. 销售数据分析仪表板
<?php
/**
- 数据分析仪表板
- 提供产品线性能的可视化分析
*/
class FPP_Analytics_Dashboard {
public function __construct() {
add_action('admin_menu', array($this, 'add_analytics_menu'));
add_action('admin_enqueue_scripts', array($this, 'enqueue_analytics_scripts'));
}
/**
* 添加分析菜单
*/
public function add_analytics_menu() {
add_submenu_page(
'edit.php?post_type=cultural_product',
'产品线分析',
'数据分析',
'manage_options',
'fpp-analytics',
array($this, 'render_analytics_dashboard')
);
}
/**
* 渲染分析仪表板
*/
public function render_analytics_dashboard() {
?>
<div class="wrap">
<h1>文创产品线分析仪表板</h1>
<div class="fpp-analytics-container">
<div class="analytics-header">
<div class="date-range-selector">
<label for="date-range">选择时间范围:</label>
<select id="date-range">
<option value="7">最近7天</option>
<option value="30" selected>最近30天</option>
<option value="90">最近90天</option>
<option value="365">最近1年</option>
<option value="custom">自定义范围</option>
</select>
<div id="custom-date-range" style="display:none;">
<input type="date" id="start-date">
<span>至</span>
<input type="date" id="end-date">
</div>
</div>
</div>
<div class="analytics-grid">
<!-- KPI指标卡片 -->
<div class="kpi-card">
<h3>总销售额</h3>
<div class="kpi-value" id="total-sales">¥0</div>
<div class="kpi-change" id="sales-change">--</div>
</div>
<div class="kpi-card">
<h3>订单数量</h3>
<div class="kpi-value" id="total-orders">0</div>
<div class="kpi-change" id="orders-change">--</div>
</div>
<div class="kpi-card">
<h3>热门模块</h3>
<div class="kpi-value" id="top-module">--</div>
<div class="kpi-subtext" id="module-usage">--</div>
</div>
<div class="kpi-card">
<h3>平均订单价值</h3>
<div class="kpi-value" id="avg-order-value">¥0</div>
<div class="kpi-change" id="aov-change">--</div>
</div>
</div>
<!-- 图表区域 -->
<div class="charts-section">
<div class="chart-container">
<h3>销售额趋势</h3>
<canvas id="sales-trend-chart" width="400" height="200"></canvas>
</div>
<div class="chart-container">
<h3>模块使用分布</h3>
<canvas id="module-usage-chart" width="400" height="200"></canvas>
</div>
<div class="chart-container full-width">
<h3>产品线性能对比</h3>
<canvas id="product-line-chart" width="800" height="300"></canvas>
</div>
</div>
<!-- 数据表格 -->
<div class="data-table-section">
<h3>详细数据</h3>
<table id="analytics-data-table" class="wp-list-table widefat fixed striped">
<thead>
<tr>
<th>产品系列</th>
<th>销售额</th>
<th>订单数</th>
<th>平均价格</th>
<th>模块使用率</th>
<th>利润率</th>
</tr>
</thead>
<tbody id="analytics-table-body">
<!-- 数据将通过AJAX动态加载 -->
</tbody>
</table>
</div>
</div>
</div>
<?php
}
/**
* 加载分析脚本
*/
public function enqueue_analytics_scripts($hook) {
if ($hook !== 'cultural-product_page_fpp-analytics') {
return;
}
// 加载Chart.js用于数据可视化
wp_enqueue_script(
'chart-js',
'https://cdn.jsdelivr.net/npm/chart.js@3.7.0/dist/chart.min.js',
array(),
'3.7.0',
true
);
// 加载自定义分析脚本
wp_enqueue_script(
'fpp-analytics',
FPP_PLUGIN_URL . 'assets/js/analytics.js',
array('jquery', 'chart-js'),
FPP_VERSION,
true
);
// 传递数据到JavaScript
wp_localize_script('fpp-analytics', 'fpp_analytics', array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('fpp_analytics_nonce'),
'default_date_range' => 30
));
// 加载样式
wp_enqueue_style(
'fpp-analytics-style',
FPP_PLUGIN_URL . 'assets/css/analytics.css',
array(),
FPP_VERSION
);
}
/**
* 获取分析数据(AJAX处理)
*/
public function get_analytics_data() {
check_ajax_referer('fpp_analytics_nonce', 'nonce');
$date_range = isset($_POST['date_range']) ? intval($_POST['date_range']) : 30;
$start_date = isset($_POST['start_date']) ? sanitize_text_field($_POST['start_date']) : '';
$end_date = isset($_POST['end_date']) ? sanitize_text_field($_POST['end_date']) : '';
// 计算日期范围
if ($date_range !== 'custom') {
$end_date = current_time('mysql');
$start_date = date('Y-m-d H:i:s', strtotime("-{$date_range} days"));
}
$data = array(
'kpis' => $this->calculate_kpis($start_date, $end_date),
'sales_trend' => $this->get_sales_trend($start_date, $end_date),
'module_distribution' => $this->get_module_distribution($start_date, $end_date),
'product_line_performance' => $this->get_product_line_performance($start_date, $end_date),
'detailed_data' => $this->get_detailed_analytics($start_date, $end_date)
);
wp_send_json_success($data);
}
/**
* 计算关键绩效指标
*/
private function calculate_kpis($start_date, $end_date) {
global $wpdb;
$orders_table = $wpdb->prefix . 'fpp_orders';
$order_items_table = $wpdb->prefix . 'fpp_order_items';
// 获取总销售额
$total_sales = $wpdb->get_var($wpdb->prepare(
"SELECT SUM(total_amount)
FROM {$orders_table}
WHERE order_date BETWEEN %s AND %s
AND status = 'completed'",
$start_date, $end_date
)) ?: 0;
// 获取订单数量
$total_orders = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*)
FROM {$orders_table}
WHERE order_date BETWEEN %s AND %s
AND status = 'completed'",
$start_date, $end_date
)) ?: 0;
// 获取最热门模块
$top_module = $wpdb->get_row($wpdb->prepare(
"SELECT m.module_name, COUNT(oi.id) as usage_count
FROM {$order_items_table} oi
JOIN {$wpdb->prefix}fpp_product_modules m ON oi.module_id = m.id
JOIN {$orders_table} o ON oi.order_id = o.id
WHERE o.order_date BETWEEN %s AND %s
GROUP BY oi.module_id
ORDER BY usage_count DESC
LIMIT 1",
$start_date, $end_date
));
// 计算平均订单价值
$avg_order_value = $total_orders > 0 ? $total_sales / $total_orders : 0;
return array(
'total_sales' => floatval($total_sales),
'total_orders' => intval($total_orders),
'top_module' => $top_module ? $top_module->module_name : '无数据',
'module_usage' => $top_module ? "使用 {$top_module->usage_count} 次" : '',
'avg_order_value' => floatval($avg_order_value)
);
}
}
?>
## 集成与扩展功能
### 1. WooCommerce集成
<?php
/**
- WooCommerce集成类
- 将柔性产品系统与WooCommerce电商功能集成
*/
class FPP_WooCommerce_Integration {
public function __construct() {
if (class_exists('WooCommerce')) {
$this->init_integration();
}
}
private function init_integration() {
// 添加自定义产品类型
add_filter('product_type_selector', array($this, 'add_cultural_product_type'));
// 注册自定义产品类型
add_action('init', array($this, 'register_cultural_product_type'));
// 添加产品配置器到产品页面
add_action('woocommerce_before_add_to_cart_button', array($this, 'add_configurator_to_product_page'));
// 处理自定义产品的购物车添加
add_filter('woocommerce_add_cart_item_data', array($this, 'add_custom_data_to_cart_item'), 10, 2);
// 在购物车中显示配置信息
add_filter('woocommerce_get_item_data', array($this, 'display_configuration_in_cart'), 10, 2);
// 保存配置到订单
add_action('woocommerce_checkout_create_order_line_item', array($this, 'save_configuration_to_order'), 10, 4);
}
/**
* 添加文创产品类型到WooCommerce
*/
public function add_cultural_product_type($types) {
$types['cultural_product'] = __('文创定制产品', 'fpp');
return $types;
}
/**
* 在产品页面添加配置器
*/
public function add_configurator_to_product_page() {
global $product;
if ($product->get_type() === 'cultural_product') {
echo '<div id="fpp-product-configurator"
data-product-id="' . esc_attr($product->get_id()) . '">
<!-- 配置器将通过JavaScript渲染 -->
</div>';
// 添加配置器脚本
wp_enqueue_script('fpp-configurator');
}
}
/**
* 将配置数据添加到购物车项目
*/
public function add_custom_data_to_cart_item($cart_item_data, $product_id) {
if (isset($_POST['fpp_configuration'])) {
$configuration = json_decode(stripslashes($_POST['fpp_configuration']), true);
if ($configuration) {
$cart_item_data['fpp_configuration'] = $configuration;
$cart_item_data['unique_key'] = md5(microtime().rand()); // 确保唯一性
}
}
return $cart_item_data;
}
/**
* 在购物车中显示配置信息
*/
public function display_configuration_in_cart($item_data, $cart_item) {
if (isset($cart_item['fpp_configuration'])) {
$config = $cart_item['fpp_configuration'];
$item_data[] = array(
'name' => '产品配置',
'value' => $this->format_configuration_for_display($config)
);
// 显示已选模块
if (!empty($config['modules'])) {
$modules_list = array();
foreach ($config['modules'] as $module) {
$modules_list[] = $module['name'] . ' (¥' . number_format($module['price'], 2) . ')';
}
$item_data[] = array(
'name' => '已选模块',
'value' => implode('<br>', $modules_list)
);
}
}
return $item_data;
}
/**
* 格式化配置信息用于显示
*/
private function format_configuration_for_display($config) {
$total_price = isset($config['totalPrice']) ? $config['totalPrice'] : 0;
$module_count = isset($config['modules']) ? count($config['modules']) : 0;
return sprintf(
'定制产品 (%d个模块) - 总价: ¥%s',
$module_count,
number_format($total_price, 2)
);
}
}
?>
### 2. REST API 扩展
<?php
/**
- REST API 扩展
- 为移动应用和第三方集成提供API支持
*/
class FPP_REST_API_Extension {
public function __construct() {
add_action('rest_api_init', array($this, 'register_rest_routes'));
}
/**
* 注册REST API路由
*/
public function register_rest_routes() {
// 获取产品配置选项
register_rest_route('fpp/v1', '/products/(?P<id>d+)/configuration-options', array(
'methods' => 'GET',
'callback' => array($this, 'get_configuration_options'),
'permission_callback' => array($this, 'check_api_permission'),
'args' => array(
'id' => array(
'validate_callback' => function($param, $request, $key) {
return is_numeric($param);
}
),
),
));
// 提交产品配置
register_rest_route('fpp/v1', '/configurations', array(
'methods' => 'POST',
'callback' => array($this, 'create_configuration'),
'permission_callback' => array($this, 'check_api_permission'),
));
// 获取产品线分析数据
register_rest_route('fpp/v1', '/analytics/product-line', array(
'methods' => 'GET',
'callback' => array($this, 'get_product_line_analytics'),
'permission_callback' => array($this, 'check_admin_permission'),
));
}
/**
* 获取产品配置选项
*/
public function get_configuration_options($request) {
$product_id = $request->get_param('id');
// 验证产品是否存在
$product = get_post($product_id);
if (!$product || $product->post_type !== 'cultural_product') {
return new WP_Error('invalid_product', '产品不存在', array('status' => 404));
}
// 获取产品基础信息
$base_price = get_post_meta($product_id, '_base_price', true) ?: 0;
// 获取可用模块
$module_manager = new FPP_Module_Manager();
$modules = $module_manager->get_all_modules();
// 获取产品特定配置
$product_config = get_post_meta($product_id, '_fpp_configuration', true);
$response = array(
'product' => array(
'id' => $product_id,
'title' => $product->post_title,
'base_price' => floatval($base_price),
'description' => $product->post_excerpt,
'image' => get_the_post_thumbnail_url($product_id, 'full')
),
'modules' => $modules,
'configuration_rules' => $product_config,
'max_modules' => isset($product_config['max_modules']) ? $product_config['max_modules'] : 10
);
return rest_ensure_response($response);
}
/**
* 创建产品配置
*/
public function create_configuration($request) {
$parameters = $request->get_json_params();
// 验证必要参数
if (empty($parameters['product_id']) || empty($parameters['modules'])) {
return new WP_Error('missing_parameters', '缺少必要参数', array('status' => 400));
}
$product_id = intval($parameters['product_id']);
$modules = $parameters['modules'];
$user_id = isset($parameters['user_id']) ? intval($parameters['user_id']) :
