首页 / 教程文章 / WordPress文创插件实现柔性产品线规划的详细教程

WordPress文创插件实现柔性产品线规划的详细教程

WordPress文创插件实现柔性产品线规划的详细教程

引言:文创产品线规划的挑战与机遇

在当今文创产业快速发展的时代,如何高效管理多样化的产品线成为许多文创企业的核心挑战。传统产品管理方式往往难以适应文创产品快速迭代、个性化定制和灵活调整的需求。本文将详细介绍如何通过WordPress插件实现柔性产品线规划,帮助文创企业构建灵活、可扩展的产品管理体系。

什么是柔性产品线规划?

柔性产品线规划是一种能够快速响应市场变化、支持产品多样化配置的管理方法。它允许企业:

  1. 根据市场需求快速调整产品组合
  2. 支持个性化产品定制
  3. 实现产品模块化组合
  4. 降低库存风险和成本

准备工作:环境与工具配置

在开始之前,请确保您的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']) : 
本文来自网络,不代表柔性供应链服务中心立场,转载请注明出处:https://mall.org.cn/6160.html

EXCHANGES®作者

上一篇
下一篇

为您推荐

发表回复

联系我们

联系我们

18559313275

在线咨询: QQ交谈

邮箱: vip@exchanges.center

工作时间:周一至周五,9:00-17:30,节假日休息
返回顶部