首页 / 教程文章 / WordPress文创商品柔性预售与社区团购插件集成教程

WordPress文创商品柔性预售与社区团购插件集成教程

本教程详细指导如何在WordPress中集成文创商品的柔性预售与社区团购功能。通过柔性预售,商家可根据订单灵活生产,降低库存风险;社区团购则借助社交裂变实现低成本获客。教程涵盖环境准备、插件规划、预售与团购功能开发、前后端集成及订单佣金处理等关键步骤,确保与WooCommerce无缝对接,帮助商家构建灵活高效的文创电商系统。

WordPress文创商品柔性预售与社区团购插件集成教程

一、项目概述与需求分析

在文创电商领域,柔性预售和社区团购是两种极具潜力的商业模式。柔性预售允许商家根据订单量灵活安排生产,减少库存压力;社区团购则通过社交裂变实现低成本获客。本教程将指导您如何在WordPress中集成这两种功能。

核心需求:

  1. 商品支持预售模式,可设置预售期限和最小起订量
  2. 社区团购功能,支持团长管理和佣金结算
  3. 用户友好的前台界面和后台管理
  4. 与WooCommerce无缝集成

二、环境准备与插件规划

2.1 环境要求

<?php
/**
 * 检查系统环境要求
 * 需要PHP 7.4+、WordPress 5.6+、WooCommerce 4.0+
 */
function check_environment_requirements() {
    $errors = array();
    
    // 检查PHP版本
    if (version_compare(PHP_VERSION, '7.4.0', '<')) {
        $errors[] = '需要PHP 7.4或更高版本';
    }
    
    // 检查WordPress版本
    if (version_compare(get_bloginfo('version'), '5.6', '<')) {
        $errors[] = '需要WordPress 5.6或更高版本';
    }
    
    // 检查WooCommerce是否激活
    if (!class_exists('WooCommerce')) {
        $errors[] = '需要安装并激活WooCommerce插件';
    }
    
    return $errors;
}

// 执行环境检查
$env_errors = check_environment_requirements();
if (!empty($env_errors)) {
    foreach ($env_errors as $error) {
        echo '<div class="error"><p>' . esc_html($error) . '</p></div>';
    }
}
?>

2.2 插件结构规划

wp-content/plugins/cultural-presale-groupbuy/
├── assets/              # 静态资源
├── includes/            # 核心代码
│   ├── class-presale.php
│   ├── class-groupbuy.php
│   └── class-integration.php
├── templates/           # 模板文件
├── cultural-presale-groupbuy.php  # 主文件
└── uninstall.php        # 卸载脚本

三、预售功能开发实现

3.1 预售商品数据模型

<?php
/**
 * 预售商品自定义字段
 */
class Cultural_Presale_Product {
    
    /**
     * 初始化预售功能
     */
    public function init() {
        // 添加商品预售设置字段
        add_action('woocommerce_product_options_general_product_data', array($this, 'add_presale_fields'));
        add_action('woocommerce_process_product_meta', array($this, 'save_presale_fields'));
        
        // 修改商品显示
        add_filter('woocommerce_get_price_html', array($this, 'display_presale_price'), 10, 2);
    }
    
    /**
     * 添加预售设置字段到商品编辑页面
     */
    public function add_presale_fields() {
        global $product_object;
        
        echo '<div class="options_group presale-options">';
        
        // 预售开关
        woocommerce_wp_checkbox(array(
            'id'            => '_is_presale',
            'label'         => __('启用预售', 'cultural-presale'),
            'description'   => __('启用商品预售功能', 'cultural-presale'),
            'value'         => $product_object->get_meta('_is_presale', true),
        ));
        
        // 预售开始时间
        woocommerce_wp_text_input(array(
            'id'            => '_presale_start_date',
            'label'         => __('预售开始时间', 'cultural-presale'),
            'type'          => 'datetime-local',
            'value'         => $product_object->get_meta('_presale_start_date', true),
        ));
        
        // 预售结束时间
        woocommerce_wp_text_input(array(
            'id'            => '_presale_end_date',
            'label'         => __('预售结束时间', 'cultural-presale'),
            'type'          => 'datetime-local',
            'value'         => $product_object->get_meta('_presale_end_date', true),
        ));
        
        // 最小起订量
        woocommerce_wp_text_input(array(
            'id'            => '_presale_min_qty',
            'label'         => __('最小起订量', 'cultural-presale'),
            'type'          => 'number',
            'value'         => $product_object->get_meta('_presale_min_qty', true) ?: 10,
            'custom_attributes' => array('min' => '1'),
        ));
        
        // 预计发货时间
        woocommerce_wp_text_input(array(
            'id'            => '_estimated_delivery_date',
            'label'         => __('预计发货时间', 'cultural-presale'),
            'type'          => 'date',
            'value'         => $product_object->get_meta('_estimated_delivery_date', true),
        ));
        
        echo '</div>';
    }
    
    /**
     * 保存预售字段数据
     */
    public function save_presale_fields($product_id) {
        $product = wc_get_product($product_id);
        
        // 保存预售开关
        $is_presale = isset($_POST['_is_presale']) ? 'yes' : 'no';
        $product->update_meta_data('_is_presale', $is_presale);
        
        // 保存预售时间
        if (isset($_POST['_presale_start_date'])) {
            $product->update_meta_data('_presale_start_date', sanitize_text_field($_POST['_presale_start_date']));
        }
        
        if (isset($_POST['_presale_end_date'])) {
            $product->update_meta_data('_presale_end_date', sanitize_text_field($_POST['_presale_end_date']));
        }
        
        // 保存最小起订量
        if (isset($_POST['_presale_min_qty'])) {
            $product->update_meta_data('_presale_min_qty', absint($_POST['_presale_min_qty']));
        }
        
        // 保存预计发货时间
        if (isset($_POST['_estimated_delivery_date'])) {
            $product->update_meta_data('_estimated_delivery_date', sanitize_text_field($_POST['_estimated_delivery_date']));
        }
        
        $product->save();
    }
    
    /**
     * 显示预售价格信息
     */
    public function display_presale_price($price, $product) {
        if ($product->get_meta('_is_presale') === 'yes') {
            $end_date = $product->get_meta('_presale_end_date');
            $delivery_date = $product->get_meta('_estimated_delivery_date');
            
            if ($end_date) {
                $price .= '<div class="presale-badge">';
                $price .= '<span class="presale-label">' . __('预售商品', 'cultural-presale') . '</span>';
                $price .= '<span class="presale-end">' . sprintf(__('预售截止: %s', 'cultural-presale'), date('Y-m-d H:i', strtotime($end_date))) . '</span>';
                
                if ($delivery_date) {
                    $price .= '<span class="delivery-date">' . sprintf(__('预计发货: %s', 'cultural-presale'), date('Y-m-d', strtotime($delivery_date))) . '</span>';
                }
                
                $price .= '</div>';
            }
        }
        
        return $price;
    }
}

// 初始化预售功能
$presale_product = new Cultural_Presale_Product();
$presale_product->init();
?>

四、社区团购功能开发

4.1 团长管理与佣金系统

<?php
/**
 * 社区团购功能核心类
 */
class Cultural_Groupbuy {
    
    private $table_name;
    
    public function __construct() {
        global $wpdb;
        $this->table_name = $wpdb->prefix . 'cultural_groupbuy_leaders';
        
        // 初始化数据库表
        register_activation_hook(__FILE__, array($this, 'create_tables'));
        
        // 添加用户角色
        add_action('init', array($this, 'add_groupbuy_leader_role'));
        
        // 团长申请表单
        add_shortcode('groupbuy_leader_application', array($this, 'leader_application_form'));
    }
    
    /**
     * 创建团长数据表
     */
    public function create_tables() {
        global $wpdb;
        
        $charset_collate = $wpdb->get_charset_collate();
        
        $sql = "CREATE TABLE IF NOT EXISTS {$this->table_name} (
            id mediumint(9) NOT NULL AUTO_INCREMENT,
            user_id bigint(20) NOT NULL,
            community_name varchar(200) NOT NULL,
            contact_phone varchar(20) NOT NULL,
            wechat_id varchar(100),
            address text NOT NULL,
            status varchar(20) DEFAULT 'pending',
            commission_rate decimal(5,2) DEFAULT 10.00,
            total_commission decimal(10,2) DEFAULT 0.00,
            created_at datetime DEFAULT CURRENT_TIMESTAMP,
            updated_at datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
            PRIMARY KEY (id),
            KEY user_id (user_id),
            KEY status (status)
        ) $charset_collate;";
        
        require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
        dbDelta($sql);
    }
    
    /**
     * 添加团长用户角色
     */
    public function add_groupbuy_leader_role() {
        add_role('groupbuy_leader', __('社区团长', 'cultural-groupbuy'), array(
            'read' => true,
            'edit_posts' => false,
            'delete_posts' => false,
            'manage_groupbuy' => true,
        ));
    }
    
    /**
     * 团长申请表单短代码
     */
    public function leader_application_form() {
        ob_start();
        
        if (is_user_logged_in()) {
            $user_id = get_current_user_id();
            $existing_application = $this->get_leader_application($user_id);
            
            if ($existing_application) {
                echo '<div class="groupbuy-notice">';
                echo '<p>' . sprintf(__('您已提交申请,当前状态: %s', 'cultural-groupbuy'), 
                    $this->get_status_text($existing_application->status)) . '</p>';
                echo '</div>';
            } else {
                ?>
                <form id="groupbuy-leader-application" method="post" class="woocommerce-form">
                    <h3><?php _e('社区团长申请表', 'cultural-groupbuy'); ?></h3>
                    
                    <p class="form-row">
                        <label for="community_name"><?php _e('社区/小区名称', 'cultural-groupbuy'); ?> <span class="required">*</span></label>
                        <input type="text" name="community_name" id="community_name" required>
                    </p>
                    
                    <p class="form-row">
                        <label for="contact_phone"><?php _e('联系电话', 'cultural-groupbuy'); ?> <span class="required">*</span></label>
                        <input type="tel" name="contact_phone" id="contact_phone" required>
                    </p>
                    
                    <p class="form-row">
                        <label for="wechat_id"><?php _e('微信号', 'cultural-groupbuy'); ?></label>
                        <input type="text" name="wechat_id" id="wechat_id">
                    </p>
                    
                    <p class="form-row">
                        <label for="address"><?php _e('详细地址', 'cultural-groupbuy'); ?> <span class="required">*</span></label>
                        <textarea name="address" id="address" rows="3" required></textarea>
                    </p>
                    
                    <p class="form-row">
                        <input type="submit" name="submit_application" value="<?php _e('提交申请', 'cultural-groupbuy'); ?>">
                    </p>
                    
                    <?php wp_nonce_field('groupbuy_leader_application', 'groupbuy_nonce'); ?>
                </form>
                
                <script>
                jQuery(document).ready(function($) {
                    $('#groupbuy-leader-application').on('submit', function(e) {
                        e.preventDefault();
                        
                        $.ajax({
                            url: '<?php echo admin_url('admin-ajax.php'); ?>',
                            type: 'POST',
                            data: {
                                action: 'submit_groupbuy_application',
                                nonce: $('#groupbuy_nonce').val(),
                                form_data: $(this).serialize()
                            },
                            success: function(response) {
                                if (response.success) {
                                    alert(response.data.message);
                                    location.reload();
                                } else {
                                    alert(response.data);
                                }
                            }
                        });
                    });
                });
                </script>
                <?php
            }
        } else {
            echo '<p>' . __('请先登录再申请成为团长', 'cultural-groupbuy') . '</p>';
            echo '<a href="' . wp_login_url(get_permalink()) . '" class="button">' . __('登录', 'cultural-groupbuy') . '</a>';
        }
        
        return ob_get_clean();
    }
    
    /**
     * 获取团长申请状态文本
     */
    private function get_status_text($status) {
        $statuses = array(
            'pending' => __('审核中', 'cultural-groupbuy'),
            'approved' => __('已通过', 'cultural-groupbuy'),
            'rejected' => __('已拒绝', 'cultural-groupbuy')
        );
        
        return isset($statuses[$status]) ? $statuses[$status] : $status;
    }
}

// 初始化社区团购功能
$groupbuy = new Cultural_Groupbuy();
?>

五、功能集成与前端展示

5.1 商品页面集成

<?php
/**
 * 商品页面预售和团购功能集成
 */
class Cultural_Product_Integration {
    
    public function init() {
        // 在商品页面添加预售和团购信息
        add_action('woocommerce_before_add_to_cart_button', array($this, 'display_product_features'));
        
        // 修改加入购物车按钮文本
        add_filter('woocommerce_product_single_add_to_cart_text', array($this, 'change_add_to_cart_text'), 10, 2);
        
        // 添加团购专属价格
        add_action('woocommerce_before_add_to_cart_quantity', array($this, 'add_groupbuy_price_option'));
    }
    
    /**
     * 显示商品特色功能
     */
    public function display_product_features() {
        global $product;
        
        $is_presale = $product->get_meta('_is_presale') === 'yes';
        $is_groupbuy = $product->get_meta('_is_groupbuy') === 'yes';
        
        if ($is_presale || $is_groupbuy) {
            echo '<div class="cultural-product-features">';
            
            if ($is_presale) {
                $this->display_presale_info($product);
            }
            
            if ($is_groupbuy) {
                $this->display_groupbuy_info($product);
            }
            
            echo '</div>';
        }
    }
    
    /**
     * 显示预售信息
     */
    private function display_presale_info($product) {
        $end_date = $product->get_meta('_presale_end_date');
        $min_qty = $product->get_meta('_presale_min_qty');
        $delivery_date = $product->get_meta('_estimated_delivery_date');
        
        echo '<div class="presale-info-box">';
        echo '<h4>' . __('🎯 预售说明', 'cultural-presale') . '</h4>';
        echo '<ul>';
        
        if ($end_date) {
            echo '<li>' . sprintf(__('• 预售截止: %s', 'cultural-presale'), 
                date('Y年m月d日 H:i', strtotime($end_date))) . '</li>';
        }
        
        if ($min_qty) {
            echo '<li>' . sprintf(__('• 最小起订量: %d件', 'cultural-presale'), $min_qty) . '</li>';
        }
        
        if ($delivery_date) {
            echo '<li>' . sprintf(__('• 预计发货: %s', 'cultural-presale'), 
                date('Y年m月d日', strtotime($delivery_date))) . '</li>';
        }
        
        echo '<li>' . __('• 达到起订量后安排生产', 'cultural-presale') . '</li>';
        echo '<li>' . __('• 支持随时退款(发货前)', 'cultural-presale') . '</li>';
        echo '</ul>';
        echo '</div>';
    }
    
    /**
     * 显示团购信息
     */
    private function display_groupbuy_info($product) {
        $groupbuy_price = $product->get_meta('_groupbuy_price');
        $groupbuy_end = $product->get_meta('_groupbuy_end_date');
        $joined_count = $this->get_groupbuy_joined_count($product->get_id());
        
        echo '<div class="groupbuy-info-box">';
        echo '<h4>' . __('👥 社区团购', 'cultural-groupbuy') . '</h4>';
        
        if ($groupbuy_price) {
            echo '<p class="groupbuy-price">' . sprintf(__('团购价: <strong>%s</strong>', 'cultural-groupbuy'), 
                wc_price($groupbuy_price)) . '</p>';
        }
        
        if ($groupbuy_end) {
            $time_left = strtotime($groupbuy_end) - current_time('timestamp');
            $days_left = ceil($time_left / DAY_IN_SECONDS);
            
            echo '<div class="groupbuy-progress">';
            echo '<p>' . sprintf(__('已有 %d 人参与团购', 'cultural-groupbuy'), $joined_count) . '</p>';
            
            if ($days_left > 0) {
                echo sprintf(__('剩余时间: %d天', 'cultural-groupbuy'), $days_left);
            } else {
                echo '<p class="time-ended">' . __('团购已结束', 'cultural-groupbuy') . '</p>';
            }
            
            echo '</div>';
        }
        
        // 团购加入按钮
        echo '<button type="button" class="button join-groupbuy" data-product-id="' . $product->get_id() . '">';
        echo __('加入社区团购', 'cultural-groupbuy');
        echo '</button>';
        
        echo '</div>';
        
        // 团购加入模态框
        $this->render_groupbuy_modal();
    }
    
    /**
     * 修改加入购物车按钮文本
     */
    public function change_add_to_cart_text($text, $product) {
        if ($product->get_meta('_is_presale') === 'yes') {
            return __('立即预订', 'cultural-presale');
        }
        
        if ($product->get_meta('_is_groupbuy') === 'yes') {
            return __('参与团购', 'cultural-groupbuy');
        }
        
        return $text;
    }
    
    /**
     * 添加团购价格选项
     */
    public function add_groupbuy_price_option() {
        global $product;
        
        if ($product->get_meta('_is_groupbuy') === 'yes') {
            $regular_price = $product->get_regular_price();
            $groupbuy_price = $product->get_meta('_groupbuy_price');
            
            if ($groupbuy_price && $groupbuy_price < $regular_price) {
                echo '<div class="price-options">';
                echo '<label class="price-option">';
                echo '<input type="radio" name="price_option" value="regular" checked> ';
                echo sprintf(__('单独购买: %s', 'cultural-groupbuy'), wc_price($regular_price));
                echo '</label>';
                
                echo '<label class="price-option groupbuy-option">';
                echo '<input type="radio" name="price_option" value="groupbuy"> ';
                echo sprintf(__('参与团购: %s', 'cultural-groupbuy'), wc_price($groupbuy_price));
                echo '</label>';
                echo '</div>';
            }
        }
    }
    
    /**
     * 渲染团购加入模态框
     */
    private function render_groupbuy_modal() {
        ?>
        <div id="groupbuy-modal" class="cultural-modal" style="display:none;">
            <div class="modal-content">
                <span class="close-modal">&times;</span>
                <h3><?php _e('选择社区团长', 'cultural-groupbuy'); ?></h3>
                
                <div class="leaders-list">
                    <?php $this->render_leaders_list(); ?>
                </div>
                
                <div class="modal-actions">
                    <button type="button" class="button confirm-join"><?php _e('确认加入', 'cultural-groupbuy'); ?></button>
                    <button type="button" class="button button-secondary close-modal"><?php _e('取消', 'cultural-groupbuy'); ?></button>
                </div>
            </div>
        </div>
        
        <style>
        .cultural-modal {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(0,0,0,0.5);
            z-index: 9999;
        }
        .modal-content {
            background: white;
            width: 90%;
            max-width: 500px;
            margin: 50px auto;
            padding: 20px;
            border-radius: 8px;
        }
        .close-modal {
            float: right;
            cursor: pointer;
            font-size: 24px;
        }
        </style>
        
        <script>
        jQuery(document).ready(function($) {
            // 打开团购模态框
            $('.join-groupbuy').on('click', function() {
                $('#groupbuy-modal').show();
            });
            
            // 关闭模态框
            $('.close-modal').on('click', function() {
                $('#groupbuy-modal').hide();
            });
            
            // 确认加入团购
            $('.confirm-join').on('click', function() {
                var selectedLeader = $('input[name="leader_id"]:checked').val();
                var productId = $('.join-groupbuy').data('product-id');
                
                if (!selectedLeader) {
                    alert('请选择社区团长');
                    return;
                }
                
                $.ajax({
                    url: '<?php echo admin_url('admin-ajax.php'); ?>',
                    type: 'POST',
                    data: {
                        action: 'join_groupbuy',
                        product_id: productId,
                        leader_id: selectedLeader,
                        nonce: '<?php echo wp_create_nonce('join_groupbuy'); ?>'
                    },
                    success: function(response) {
                        if (response.success) {
                            alert('成功加入团购!');
                            $('#groupbuy-modal').hide();
                            location.reload();
                        } else {
                            alert(response.data);
                        }
                    }
                });
            });
        });
        </script>
        <?php
    }
    
    /**
     * 渲染团长列表
     */
    private function render_leaders_list() {
        global $wpdb;
        
        $leaders = $wpdb->get_results("
            SELECT l.*, u.display_name 
            FROM {$wpdb->prefix}cultural_groupbuy_leaders l
            LEFT JOIN {$wpdb->users} u ON l.user_id = u.ID
            WHERE l.status = 'approved'
            ORDER BY l.community_name
        ");
        
        if (empty($leaders)) {
            echo '<p>' . __('暂无可用团长', 'cultural-groupbuy') . '</p>';
            return;
        }
        
        foreach ($leaders as $leader) {
            echo '<div class="leader-item">';
            echo '<label>';
            echo '<input type="radio" name="leader_id" value="' . esc_attr($leader->id) . '"> ';
            echo '<strong>' . esc_html($leader->community_name) . '</strong>';
            echo '<span class="leader-info">';
            echo '团长:' . esc_html($leader->display_name);
            echo ' | 联系方式:' . esc_html($leader->contact_phone);
            echo '</span>';
            echo '</label>';
            echo '</div>';
        }
    }
}

$product_integration = new Cultural_Product_Integration();
$product_integration->init();
?>

六、订单处理与佣金计算

6.1 订单处理逻辑

<?php
/**
 * 订单处理与佣金计算
 */
class Cultural_Order_Handler {
    
    public function init() {
        // 订单状态变更时处理佣金
        add_action('woocommerce_order_status_changed', array($this, 'handle_order_status_change'), 10, 4);
        
        // 添加佣金结算短代码
        add_shortcode('leader_commission', array($this, 'leader_commission_dashboard'));
        
        // 处理AJAX请求
        add_action('wp_ajax_leader_withdraw_commission', array($this, 'handle_withdraw_request'));
    }
    
    /**
     * 处理订单状态变更
     */
    public function handle_order_status_change($order_id, $old_status, $new_status, $order) {
        // 只处理已完成和已取消的订单
        if (!in_array($new_status, array('completed', 'cancelled'))) {
            return;
        }
        
        // 检查是否为团购订单
        $is_groupbuy = $order->get_meta('_is_groupbuy_order');
        $leader_id = $order->get_meta('_groupbuy_leader_id');
        
        if ($is_groupbuy && $leader_id) {
            if ($new_status === 'completed') {
                $this->calculate_commission($order, $leader_id);
            } elseif ($new_status === 'cancelled') {
                $this->reverse_commission($order, $leader_id);
            }
        }
    }
    
    /**
     * 计算佣金
     */
    private function calculate_commission($order, $leader_id) {
        global $wpdb;
        
        // 获取团长信息
        $leader = $wpdb->get_row($wpdb->prepare(
            "SELECT * FROM {$wpdb->prefix}cultural_groupbuy_leaders WHERE id = %d",
            $leader_id
        ));
        
        if (!$leader) {
            return;
        }
        
        // 计算佣金(订单总额 * 佣金比例)
        $order_total = $order->get_total();
        $commission_rate = floatval($leader->commission_rate);
        $commission = $order_total * ($commission_rate / 100);
        
        // 更新团长佣金总额
        $wpdb->update(
            $wpdb->prefix . 'cultural_groupbuy_leaders',
            array(
                'total_commission' => $leader->total_commission + $commission,
                'updated_at' => current_time('mysql')
            ),
            array('id' => $leader_id)
        );
        
        // 记录佣金明细
        $wpdb->insert(
            $wpdb->prefix . 'cultural_commission_records',
            array(
                'leader_id' => $leader_id,
                'order_id' => $order->get_id(),
                'amount' => $commission,
                'status' => 'pending',
                'created_at' => current_time('mysql')
            )
        );
        
        // 发送佣金通知
        $this->send_commission_notification($leader, $order, $commission);
    }
    
    /**
     * 团长佣金面板
     */
    public function leader_commission_dashboard() {
        if (!is_user_logged_in() || !current_user_can('groupbuy_leader')) {
            return '<p>' . __('请以团长身份登录', 'cultural-groupbuy') . '</p>';
        }
        
        $user_id = get_current_user_id();
        $leader = $this->get_leader_by_user_id($user_id);
        
        if (!$leader) {
            return '<p>' . __('您还不是团长', 'cultural-groupbuy') . '</p>';
        }
        
        ob_start();
        ?>
        <div class="leader-commission-dashboard">
            <h3><?php _e('我的佣金', 'cultural-groupbuy'); ?></h3>
            
            <div class="commission-summary">
                <div class="summary-item">
                    <span class="label"><?php _e('累计佣金', 'cultural-groupbuy'); ?></span>
                    <span class="value"><?php echo wc_price($leader->total_commission); ?></span>
                </div>
                
                <div class="summary-item">
                    <span class="label"><?php _e('可提现佣金', 'cultural-groupbuy'); ?></span>
                    <span class="value"><?php echo wc_price($this->get_available_commission($leader->id)); ?></span>
                </div>
                
                <div class="summary-item">
                    <span class="label"><?php _e('佣金比例', 'cultural-groupbuy'); ?></span>
                    <span class="value"><?php echo $leader->commission_rate; ?>%</span>
                </div>
            </div>
            
            <div class="withdraw-section">
                <h4><?php _e('佣金提现', 'cultural-groupbuy'); ?></h4>
                
                <form id="commission-withdraw-form">
                    <div class="form-group">
                        <label for="withdraw_amount"><?php _e('提现金额', 'cultural-groupbuy'); ?></label>
                        <input type="number" 
                               id="withdraw_amount" 
                               name="withdraw_amount" 
                               min="1" 
                               max="<?php echo $this->get_available_commission($leader->id); ?>"
                               step="0.01">
                    </div>
                    
                    <div class="form-group">
                        <label for="withdraw_method"><?php _e('提现方式', 'cultural-groupbuy'); ?></label>
                        <select id="withdraw_method" name="withdraw_method">
                            <option value="alipay"><?php _e('支付宝', 'cultural-groupbuy'); ?></option>
                            <option value="wechat"><?php _e('微信支付', 'cultural-groupbuy'); ?></option>
                            <option value="bank"><?php _e('银行转账', 'cultural-groupbuy'); ?></option>
                        </select>
                    </div>
                    
                    <div class="form-group">
                        <label for="account_info"><?php _e('账户信息', 'cultural-groupbuy'); ?></label>
                        <input type="text" 
                               id="account_info" 
                               name="account_info" 
                               placeholder="<?php _e('请输入收款账户', 'cultural-groupbuy'); ?>"
                               required>
                    </div>
                    
                    <button type="submit" class="button"><?php _e('提交提现申请', 'cultural-groupbuy'); ?></button>
                    <?php wp_nonce_field('commission_withdraw', 'withdraw_nonce'); ?>
                </form>
            </div>
            
            <div class="commission-history">
                <h4><?php _e('佣金记录', 'cultural-groupbuy'); ?></h4>
                <?php $this->render_commission_history($leader->id); ?>
            </div>
        </div>
        
        <script>
        jQuery(document).ready(function($) {
            $('#commission-withdraw-form').on('submit', function(e) {
                e.preventDefault();
                
                var formData = $(this).serialize();
                
                $.ajax({
                    url: '<?php echo admin_url('admin-ajax.php'); ?>',
                    type: 'POST',
                    data: {
                        action: 'leader_withdraw_commission',
                        leader_id: <?php echo $leader->id; ?>,
                        form_data: formData
                    },
                    success: function(response) {
                        if (response.success) {
                            alert(response.data.message);
                            location.reload();
                        } else {
                            alert(response.data);
                        }
                    }
                });
            });
        });
        </script>
        <?php
        
        return ob_get_clean();
    }
}

$order_handler = new Cultural_Order_Handler();
$order_handler->init();
?>

七、后台管理与设置

7.1 后台管理界面

<?php
/**
 * 后台管理功能
 */
class Cultural_Admin_Manager {
    
    public function init() {
        // 添加管理菜单
        add_action('admin_menu', array($this, 'add_admin_menu'));
        
        // 团长申请审核
        add_action('wp_ajax_approve_leader_application', array($this, 'approve_leader_application'));
        
        // 佣金提现审核
        add_action('wp_ajax_process_withdraw_request', array($this, 'process_withdraw_request'));
        
        // 添加商品批量操作
        add_filter('bulk_actions-edit-product', array($this, 'add_product_bulk_actions'));
        add_filter('handle_bulk_actions-edit-product', array($this, 'handle_product_bulk_actions'), 10, 3);
    }
    
    /**
     * 添加管理菜单
     */
    public function add_admin_menu() {
        // 主菜单
        add_menu_page(
            __('文创预售团购', 'cultural-presale-groupbuy'),
            __('文创预售团购', 'cultural-presale-groupbuy'),
            'manage_options',
            'cultural-presale-groupbuy',
            array($this, 'render_dashboard'),
            'dashicons-store',
            56
        );
        
        // 子菜单
        add_submenu_page(
            'cultural-presale-groupbuy',
            __('团长管理', 'cultural-presale-groupbuy'),
            __('团长管理', 'cultural-presale-groupbuy'),
            'manage_options',
            'cultural-leaders',
            array($this, 'render_leaders_page')
        );
        
        add_submenu_page(
            'cultural-presale-groupbuy',
            __('佣金管理', 'cultural-presale-groupbuy'),
            __('佣金管理', 'cultural-presale-groupbuy'),
            'manage_options',
            'cultural-commissions',
            array($this, 'render_commissions_page')
        );
        
        add_submenu_page(
            'cultural-presale-groupbuy',
            __('预售统计', 'cultural-presale-groupbuy'),
            __('预售统计', 'cultural-presale-groupbuy'),
            'manage_options',
            'cultural-presale-stats',
            array($this, 'render_presale_stats')
        );
        
        add_submenu_page(
            'cultural-presale-groupbuy',
            __('设置', 'cultural-presale-groupbuy'),
            __('设置', 'cultural-presale-groupbuy'),
            'manage_options',
            'cultural-settings',
            array($this, 'render_settings_page')
        );
    }
    
    /**
     * 渲染仪表板
     */
    public function render_dashboard() {
        ?>
        <div class="wrap cultural-dashboard">
            <h1><?php _e('文创预售与团购管理', 'cultural-presale-groupbuy'); ?></h1>
            
            <div class="dashboard-widgets">
                <div class="widget">
                    <h3><?php _e('今日数据', 'cultural-presale-groupbuy'); ?></h3>
                    <div class="widget-content">
                        <?php $this->render_today_stats(); ?>
                    </div>
                </div>
                
                <div class="widget">
                    <h3><?php _e('预售商品', 'cultural-presale-groupbuy'); ?></h3>
                    <div class="widget-content">
                        <?php $this->render_presale_products(); ?>
                    </div>
                </div>
                
                <div class="widget">
                    <h3><?php _e('待处理申请', 'cultural-presale-groupbuy'); ?></h3>
                    <div class="widget-content">
                        <?php $this->render_pending_applications(); ?>
                    </div>
                </div>
            </div>
        </div>
        
        <style>
        .cultural-dashboard .dashboard-widgets {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
            gap: 20px;
            margin-top: 20px;
        }
        .cultural-dashboard .widget {
            background: white;
            border: 1px solid #ccd0d4;
            border-radius: 4px;
            padding: 15px;
        }
        .cultural-dashboard .widget h3 {
            margin-top: 0;
            border-bottom: 1px solid #eee;
            padding-bottom: 10px;
        }
        </style>
        <?php
    }
    
    /**
本文来自网络投稿,不代表本站点的立场,转载请注明出处:https://www.gongxiangcang.com/6622.html

溯源库®作者

漳州柔性供应链服务有限公司 小批量订单定制化服务商( 投稿邮箱:vip@jiaochengku.com)
上一篇
下一篇

为您推荐

联系我们

联系我们

18559313275

在线咨询: QQ交谈

邮箱: vip@suyuanku.com

工作时间:周一至周五,9:00-17:30,节假日休息
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部