文章目录[隐藏]
WordPress文创插件实现柔性分销渠道管理教程
引言:文创产品的分销挑战与解决方案
在文创产品日益流行的今天,如何有效管理分销渠道成为许多创作者和商家的核心挑战。传统的分销系统往往缺乏灵活性,难以适应文创产品多样化的销售需求。本教程将介绍如何通过WordPress插件实现柔性分销渠道管理,让您能够轻松管理不同层级的分销商、设置灵活的佣金规则,并实时跟踪销售数据。
环境准备与插件选择
1. 基础环境要求
在开始之前,请确保您的WordPress环境满足以下要求:
- WordPress 5.0或更高版本
- PHP 7.2或更高版本
- MySQL 5.6或更高版本
- 已安装WooCommerce插件(用于产品管理)
2. 推荐插件选择
我们将使用"Flexible Affiliate"作为基础插件,并在此基础上进行定制开发。您可以从WordPress官方插件库安装该插件,或使用以下代码创建自定义插件。
创建自定义分销管理插件
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('CULTURAL_DISTRIBUTION_VERSION', '1.0.0');
define('CULTURAL_DISTRIBUTION_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('CULTURAL_DISTRIBUTION_PLUGIN_URL', plugin_dir_url(__FILE__));
// 初始化插件
add_action('plugins_loaded', 'cultural_distribution_init');
function cultural_distribution_init() {
// 检查WooCommerce是否激活
if (!class_exists('WooCommerce')) {
add_action('admin_notices', 'cultural_distribution_woocommerce_notice');
return;
}
// 加载核心类
require_once CULTURAL_DISTRIBUTION_PLUGIN_DIR . 'includes/class-distribution-manager.php';
require_once CULTURAL_DISTRIBUTION_PLUGIN_DIR . 'includes/class-commission-calculator.php';
require_once CULTURAL_DISTRIBUTION_PLUGIN_DIR . 'includes/class-affiliate-dashboard.php';
// 初始化核心组件
new Distribution_Manager();
new Commission_Calculator();
// 如果是管理员,加载管理界面
if (is_admin()) {
require_once CULTURAL_DISTRIBUTION_PLUGIN_DIR . 'admin/class-admin-settings.php';
new Admin_Settings();
}
}
function cultural_distribution_woocommerce_notice() {
?>
<div class="notice notice-error">
<p>文创柔性分销管理插件需要WooCommerce支持。请先安装并激活WooCommerce插件。</p>
</div>
<?php
}
?>
2. 分销商管理模块
<?php
/**
* 分销商管理类
* 处理分销商的注册、分级和管理
*/
class Distribution_Manager {
public function __construct() {
// 添加分销商用户角色
add_action('init', array($this, 'add_affiliate_role'));
// 注册分销商注册短代码
add_shortcode('affiliate_registration', array($this, 'affiliate_registration_form'));
// 处理分销商注册提交
add_action('admin_post_affiliate_registration', array($this, 'handle_registration'));
}
/**
* 添加分销商用户角色
*/
public function add_affiliate_role() {
add_role('cultural_affiliate',
'文创分销商',
array(
'read' => true,
'edit_posts' => false,
'delete_posts' => false,
'upload_files' => true,
)
);
}
/**
* 分销商注册表单
*/
public function affiliate_registration_form() {
ob_start();
?>
<div class="affiliate-registration-form">
<h2>成为文创产品分销商</h2>
<form method="post" action="<?php echo admin_url('admin-post.php'); ?>">
<input type="hidden" name="action" value="affiliate_registration">
<div class="form-group">
<label for="affiliate_name">姓名/公司名称 *</label>
<input type="text" id="affiliate_name" name="affiliate_name" required>
</div>
<div class="form-group">
<label for="affiliate_email">邮箱地址 *</label>
<input type="email" id="affiliate_email" name="affiliate_email" required>
</div>
<div class="form-group">
<label for="affiliate_phone">联系电话</label>
<input type="tel" id="affiliate_phone" name="affiliate_phone">
</div>
<div class="form-group">
<label for="affiliate_level">希望的分销等级</label>
<select id="affiliate_level" name="affiliate_level">
<option value="basic">基础分销商 (10%佣金)</option>
<option value="premium">高级分销商 (15%佣金)</option>
<option value="partner">合作伙伴 (20%佣金 + 奖金)</option>
</select>
</div>
<div class="form-group">
<label for="marketing_plan">简要描述您的推广计划</label>
<textarea id="marketing_plan" name="marketing_plan" rows="4"></textarea>
</div>
<button type="submit" class="btn btn-primary">提交申请</button>
</form>
</div>
<?php
return ob_get_clean();
}
/**
* 处理注册申请
*/
public function handle_registration() {
// 验证非ce和权限
if (!wp_verify_nonce($_POST['_wpnonce'], 'affiliate_registration')) {
wp_die('安全验证失败');
}
// 获取表单数据
$name = sanitize_text_field($_POST['affiliate_name']);
$email = sanitize_email($_POST['affiliate_email']);
$phone = sanitize_text_field($_POST['affiliate_phone']);
$level = sanitize_text_field($_POST['affiliate_level']);
$plan = sanitize_textarea_field($_POST['marketing_plan']);
// 创建用户账户
$user_id = wp_create_user($email, wp_generate_password(), $email);
if (!is_wp_error($user_id)) {
// 更新用户信息
wp_update_user(array(
'ID' => $user_id,
'display_name' => $name,
'role' => 'cultural_affiliate'
));
// 保存分销商元数据
update_user_meta($user_id, 'affiliate_phone', $phone);
update_user_meta($user_id, 'affiliate_level', $level);
update_user_meta($user_id, 'affiliate_status', 'pending');
update_user_meta($user_id, 'affiliate_plan', $plan);
update_user_meta($user_id, 'affiliate_code', $this->generate_affiliate_code($user_id));
// 发送通知邮件
$this->send_registration_notification($user_id, $name, $email);
// 重定向到感谢页面
wp_redirect(home_url('/affiliate-thank-you'));
exit;
}
}
/**
* 生成分销商唯一代码
*/
private function generate_affiliate_code($user_id) {
return 'CULT' . str_pad($user_id, 6, '0', STR_PAD_LEFT);
}
/**
* 发送注册通知
*/
private function send_registration_notification($user_id, $name, $email) {
$admin_email = get_option('admin_email');
$subject = '新的文创分销商申请';
$message = "收到新的分销商申请:nn";
$message .= "姓名:{$name}n";
$message .= "邮箱:{$email}n";
$message .= "用户ID:{$user_id}nn";
$message .= "请登录管理后台审核申请。";
wp_mail($admin_email, $subject, $message);
}
}
?>
3. 佣金计算系统
<?php
/**
* 佣金计算类
* 根据不同的产品和分销等级计算佣金
*/
class Commission_Calculator {
private $commission_rates;
public function __construct() {
// 初始化佣金率
$this->commission_rates = array(
'basic' => 0.10, // 10%
'premium' => 0.15, // 15%
'partner' => 0.20 // 20%
);
// 在订单完成时计算佣金
add_action('woocommerce_order_status_completed', array($this, 'calculate_order_commission'), 10, 1);
}
/**
* 计算订单佣金
* @param int $order_id 订单ID
*/
public function calculate_order_commission($order_id) {
$order = wc_get_order($order_id);
$affiliate_id = $this->get_affiliate_from_order($order);
if (!$affiliate_id) {
return; // 该订单没有关联的分销商
}
$affiliate_level = get_user_meta($affiliate_id, 'affiliate_level', true);
$commission_rate = $this->get_commission_rate($affiliate_level);
$total_commission = 0;
// 计算每个产品的佣金
foreach ($order->get_items() as $item) {
$product_id = $item->get_product_id();
$product_commission_rate = $this->get_product_commission_rate($product_id);
// 使用产品特定佣金率或默认佣金率
$item_rate = $product_commission_rate ?: $commission_rate;
$item_total = $item->get_total();
$item_commission = $item_total * $item_rate;
$total_commission += $item_commission;
// 记录每项产品的佣金明细
$this->record_commission_detail(
$order_id,
$affiliate_id,
$product_id,
$item_total,
$item_rate,
$item_commission
);
}
// 记录总佣金
if ($total_commission > 0) {
$this->record_total_commission($order_id, $affiliate_id, $total_commission);
}
}
/**
* 从订单中获取分销商信息
*/
private function get_affiliate_from_order($order) {
// 这里可以从订单备注、优惠码或自定义字段中获取分销商信息
// 示例:通过优惠码识别分销商
$coupons = $order->get_coupon_codes();
foreach ($coupons as $coupon_code) {
$affiliate_id = $this->get_affiliate_by_coupon($coupon_code);
if ($affiliate_id) {
return $affiliate_id;
}
}
return false;
}
/**
* 获取分销商等级对应的佣金率
*/
private function get_commission_rate($level) {
return isset($this->commission_rates[$level]) ?
$this->commission_rates[$level] :
$this->commission_rates['basic'];
}
/**
* 获取产品特定的佣金率
*/
private function get_product_commission_rate($product_id) {
$custom_rate = get_post_meta($product_id, '_affiliate_commission_rate', true);
return $custom_rate ? floatval($custom_rate) : false;
}
/**
* 记录佣金明细
*/
private function record_commission_detail($order_id, $affiliate_id, $product_id, $amount, $rate, $commission) {
global $wpdb;
$table_name = $wpdb->prefix . 'cultural_commission_details';
$wpdb->insert(
$table_name,
array(
'order_id' => $order_id,
'affiliate_id' => $affiliate_id,
'product_id' => $product_id,
'sale_amount' => $amount,
'commission_rate' => $rate,
'commission_amount' => $commission,
'created_at' => current_time('mysql')
),
array('%d', '%d', '%d', '%f', '%f', '%f', '%s')
);
}
/**
* 记录总佣金
*/
private function record_total_commission($order_id, $affiliate_id, $total_commission) {
global $wpdb;
$table_name = $wpdb->prefix . 'cultural_commissions';
$wpdb->insert(
$table_name,
array(
'order_id' => $order_id,
'affiliate_id' => $affiliate_id,
'total_commission' => $total_commission,
'status' => 'pending',
'created_at' => current_time('mysql')
),
array('%d', '%d', '%f', '%s', '%s')
);
// 更新分销商总收益
$total_earnings = get_user_meta($affiliate_id, 'total_earnings', true);
$total_earnings = $total_earnings ? floatval($total_earnings) : 0;
$total_earnings += $total_commission;
update_user_meta($affiliate_id, 'total_earnings', $total_earnings);
}
}
?>
数据库表结构设计
1. 创建佣金相关数据表
<?php
/**
* 数据库安装和升级
*/
class Database_Manager {
public static function install_tables() {
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
// 佣金总表
$commission_table = $wpdb->prefix . 'cultural_commissions';
$commission_details_table = $wpdb->prefix . 'cultural_commission_details';
$sql = "CREATE TABLE IF NOT EXISTS $commission_table (
id bigint(20) NOT NULL AUTO_INCREMENT,
order_id bigint(20) NOT NULL,
affiliate_id bigint(20) NOT NULL,
total_commission decimal(10,2) NOT NULL,
status varchar(20) DEFAULT 'pending',
paid_date datetime DEFAULT NULL,
created_at datetime NOT NULL,
PRIMARY KEY (id),
KEY order_id (order_id),
KEY affiliate_id (affiliate_id),
KEY status (status)
) $charset_collate;
CREATE TABLE IF NOT EXISTS $commission_details_table (
id bigint(20) NOT NULL AUTO_INCREMENT,
commission_id bigint(20) NOT NULL,
order_id bigint(20) NOT NULL,
affiliate_id bigint(20) NOT NULL,
product_id bigint(20) NOT NULL,
sale_amount decimal(10,2) NOT NULL,
commission_rate decimal(5,4) NOT NULL,
commission_amount decimal(10,2) NOT NULL,
created_at datetime NOT NULL,
PRIMARY KEY (id),
KEY commission_id (commission_id),
KEY order_id (order_id),
KEY affiliate_id (affiliate_id),
KEY product_id (product_id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
}
?>
分销商前端仪表板
1. 创建分销商个人中心
<?php
/**
* 分销商仪表板类
* 提供分销商查看业绩、生成推广链接等功能
*/
class Affiliate_Dashboard {
public function __construct() {
// 添加分销商仪表板短代码
add_shortcode('affiliate_dashboard', array($this, 'render_dashboard'));
// 添加推广链接生成功能
add_action('wp_ajax_generate_affiliate_link', array($this, 'generate_affiliate_link'));
}
/**
* 渲染分销商仪表板
*/
public function render_dashboard() {
// 检查用户是否是分销商
if (!current_user_can('cultural_affiliate')) {
return '<p>您需要登录分销商账户才能访问此页面。</p>';
}
$user_id = get_current_user_id();
ob_start();
?>
<div class="affiliate-dashboard">
<h1>分销商仪表板</h1>
<div class="dashboard-stats">
<div class="stat-card">
<h3>总收益</h3>
<p class="stat-value">¥<?php echo number_format($this->get_total_earnings($user_id), 2); ?></p>
</div>
<div class="stat-card">
<h3>待结算佣金</h3>
<p class="stat-value">¥<?php echo number_format($this->get_pending_commission($user_id), 2); ?></p>
</div>
<div class="stat-card">
<h3>已推广订单</h3>
<p class="stat-value"><?php echo $this->get_total_orders($user_id); ?></p>
</div>
</div>
<div class="dashboard-section">
<h2>推广工具</h2>
<div class="promotion-tools">
<div class="tool-item">
<h4>您的推广代码</h4>
<input type="text" readonly value="<?php echo get_user_meta($user_id, 'affiliate_code', true); ?>" class="affiliate-code">
<button class="copy-btn" data-clipboard-target=".affiliate-code">复制代码</button>
</div>
<div class="tool-item">
<h4>生成推广链接</h4>
<div class="link-generator">
<select id="product-select">
<option value="">选择要推广的产品</option>
<?php echo $this->get_product_options(); ?>
</select>
<button id="generate-link-btn" class="btn-primary">生成推广链接</button>
<div id="generated-link" style="display:none; margin-top:10px;">
<input type="text" readonly class="generated-link-input">
<button class="copy-link-btn">复制链接</button>
</div>
</div>
</div>
</div>
</div>
<div class="dashboard-section">
<h2>最近订单</h2>
<table class="affiliate-orders">
<thead>
<tr>
<th>订单号</th>
<th>日期</th>
<th>金额</th>
<th>佣金</th>
<th>状态</th>
</tr>
</thead>
<tbody>
<?php echo $this->get_recent_orders($user_id); ?>
</tbody>
</table>
</div>
<div class="dashboard-section">
<h2>佣金明细</h2>
<div class="commission-chart">
<?php echo $this->render_commission_chart($user_id); ?>
</div>
</div>
</div>
<script>
jQuery(document).ready(function($) {
// 复制功能
$('.copy-btn').click(function() {
var $input = $(this).siblings('.affiliate-code');
$input.select();
document.execCommand('copy');
$(this).text('已复制!');
setTimeout(() => $(this).text('复制代码'), 2000);
});
// 生成推广链接
$('#generate-link-btn').click(function() {
var productId = $('#product-select').val();
if (!productId) {
alert('请选择产品');
return;
}
$.ajax({
url: '<?php echo admin_url('admin-ajax.php'); ?>',
type: 'POST',
data: {
action: 'generate_affiliate_link',
product_id: productId,
affiliate_code: '<?php echo get_user_meta($user_id, "affiliate_code", true); ?>',
security: '<?php echo wp_create_nonce("generate_affiliate_link"); ?>'
},
success: function(response) {
if (response.success) {
$('#generated-link').show();
$('.generated-link-input').val(response.data.link);
} else {
alert('生成链接失败');
}
}
});
});
});
</script>
<?php
return ob_get_clean();
}
/**
* 获取产品选项
*/
private function get_product_options() {
$products = wc_get_products(array(
'status' => 'publish',
'limit' => 50
));
$options = '';
foreach ($products as $product) {
$options .= sprintf(
'<option value="%d">%s</option>',
$product->get_id(),
esc_html($product->get_name())
);
}
return $options;
}
/**
* 生成推广链接
*/
public function generate_affiliate_link() {
// 验证nonce
check_ajax_referer('generate_affiliate_link', 'security');
$product_id = intval($_POST['product_id']);
$affiliate_code = sanitize_text_field($_POST['affiliate_code']);
// 构建推广链接
$base_url = get_permalink($product_id);
$affiliate_link = add_query_arg('ref', $affiliate_code, $base_url);
wp_send_json_success(array(
'link' => $affiliate_link
));
}
/**
* 获取总收益
*/
private function get_total_earnings($user_id) {
global $wpdb;
$table_name = $wpdb->prefix . 'cultural_commissions';
$total = $wpdb->get_var($wpdb->prepare(
"SELECT SUM(total_commission) FROM $table_name
WHERE affiliate_id = %d AND status = 'paid'",
$user_id
));
return $total ? floatval($total) : 0;
}
/**
* 获取待结算佣金
*/
private function get_pending_commission($user_id) {
global $wpdb;
$table_name = $wpdb->prefix . 'cultural_commissions';
$total = $wpdb->get_var($wpdb->prepare(
"SELECT SUM(total_commission) FROM $table_name
WHERE affiliate_id = %d AND status = 'pending'",
$user_id
));
return $total ? floatval($total) : 0;
}
/**
* 获取总订单数
*/
private function get_total_orders($user_id) {
global $wpdb;
$table_name = $wpdb->prefix . 'cultural_commissions';
return $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM $table_name WHERE affiliate_id = %d",
$user_id
));
}
/**
* 获取最近订单
*/
private function get_recent_orders($user_id) {
global $wpdb;
$table_name = $wpdb->prefix . 'cultural_commissions';
$orders = $wpdb->get_results($wpdb->prepare(
"SELECT * FROM $table_name
WHERE affiliate_id = %d
ORDER BY created_at DESC
LIMIT 10",
$user_id
));
$html = '';
foreach ($orders as $order) {
$order_obj = wc_get_order($order->order_id);
$order_date = $order_obj ? $order_obj->get_date_created()->date('Y-m-d') : '';
$order_total = $order_obj ? $order_obj->get_total() : 0;
$html .= sprintf(
'<tr>
<td>#%d</td>
<td>%s</td>
<td>¥%s</td>
<td>¥%s</td>
<td><span class="status-%s">%s</span></td>
</tr>',
$order->order_id,
$order_date,
number_format($order_total, 2),
number_format($order->total_commission, 2),
$order->status,
$this->get_status_label($order->status)
);
}
return $html ?: '<tr><td colspan="5">暂无订单记录</td></tr>';
}
/**
* 获取状态标签
*/
private function get_status_label($status) {
$labels = array(
'pending' => '待结算',
'paid' => '已支付',
'cancelled' => '已取消'
);
return isset($labels[$status]) ? $labels[$status] : $status;
}
/**
* 渲染佣金图表
*/
private function render_commission_chart($user_id) {
global $wpdb;
$table_name = $wpdb->prefix . 'cultural_commissions';
// 获取最近6个月的佣金数据
$results = $wpdb->get_results($wpdb->prepare(
"SELECT
DATE_FORMAT(created_at, '%%Y-%%m') as month,
SUM(total_commission) as total
FROM $table_name
WHERE affiliate_id = %d
AND created_at >= DATE_SUB(NOW(), INTERVAL 6 MONTH)
AND status = 'paid'
GROUP BY DATE_FORMAT(created_at, '%%Y-%%m')
ORDER BY month",
$user_id
));
if (empty($results)) {
return '<p>暂无佣金数据</p>';
}
// 准备图表数据
$labels = array();
$data = array();
foreach ($results as $row) {
$labels[] = $row->month;
$data[] = floatval($row->total);
}
// 生成HTML和JavaScript
ob_start();
?>
<canvas id="commissionChart" width="400" height="200"></canvas>
<script>
jQuery(document).ready(function($) {
var ctx = document.getElementById('commissionChart').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
labels: <?php echo json_encode($labels); ?>,
datasets: [{
label: '佣金收入',
data: <?php echo json_encode($data); ?>,
backgroundColor: 'rgba(54, 162, 235, 0.2)',
borderColor: 'rgba(54, 162, 235, 1)',
borderWidth: 2,
tension: 0.1
}]
},
options: {
responsive: true,
scales: {
y: {
beginAtZero: true,
ticks: {
callback: function(value) {
return '¥' + value;
}
}
}
}
}
});
});
</script>
<?php
return ob_get_clean();
}
}
?>
管理后台设置界面
1. 创建管理设置页面
<?php
/**
* 管理后台设置类
*/
class Admin_Settings {
public function __construct() {
// 添加管理菜单
add_action('admin_menu', array($this, 'add_admin_menu'));
// 注册设置
add_action('admin_init', array($this, 'register_settings'));
// 添加佣金管理页面
add_action('admin_menu', array($this, 'add_commission_management_page'));
}
/**
* 添加管理菜单
*/
public function add_admin_menu() {
add_menu_page(
'文创分销管理',
'文创分销',
'manage_options',
'cultural-distribution',
array($this, 'render_settings_page'),
'dashicons-store',
30
);
add_submenu_page(
'cultural-distribution',
'分销商管理',
'分销商管理',
'manage_options',
'cultural-affiliates',
array($this, 'render_affiliates_page')
);
add_submenu_page(
'cultural-distribution',
'佣金设置',
'佣金设置',
'manage_options',
'cultural-commission-settings',
array($this, 'render_commission_settings_page')
);
}
/**
* 渲染设置页面
*/
public function render_settings_page() {
?>
<div class="wrap">
<h1>文创分销管理设置</h1>
<form method="post" action="options.php">
<?php
settings_fields('cultural_distribution_settings');
do_settings_sections('cultural-distribution');
submit_button();
?>
</form>
<div class="settings-info">
<h3>系统状态</h3>
<ul>
<li>分销商总数: <?php echo $this->count_affiliates(); ?></li>
<li>待审核申请: <?php echo $this->count_pending_applications(); ?></li>
<li>总支付佣金: ¥<?php echo number_format($this->get_total_paid_commissions(), 2); ?></li>
</ul>
</div>
</div>
<?php
}
/**
* 注册设置
*/
public function register_settings() {
// 注册基本设置
register_setting('cultural_distribution_settings', 'cultural_distribution_settings');
// 基本设置部分
add_settings_section(
'cultural_basic_settings',
'基本设置',
array($this, 'render_basic_settings_section'),
'cultural-distribution'
);
// 佣金设置字段
add_settings_field(
'default_commission_rate',
'默认佣金比例 (%)',
array($this, 'render_default_commission_field'),
'cultural-distribution',
'cultural_basic_settings'
);
add_settings_field(
'affiliate_registration',
'分销商注册',
array($this, 'render_registration_field'),
'cultural-distribution',
'cultural_basic_settings'
);
add_settings_field(
'payment_methods',
'支付方式',
array($this, 'render_payment_methods_field'),
'cultural-distribution',
'cultural_basic_settings'
);
}
/**
* 渲染基本设置部分
*/
public function render_basic_settings_section() {
echo '<p>配置文创分销系统的基本参数</p>';
}
/**
* 渲染默认佣金字段
*/
public function render_default_commission_field() {
$options = get_option('cultural_distribution_settings');
$value = isset($options['default_commission_rate']) ? $options['default_commission_rate'] : '10';
?>
<input type="number"
name="cultural_distribution_settings[default_commission_rate]"
value="<?php echo esc_attr($value); ?>"
min="1" max="50" step="0.5">
<p class="description">新分销商的默认佣金比例</p>
<?php
}
/**
* 渲染注册设置字段
*/
public function render_registration_field() {
$options = get_option('cultural_distribution_settings');
$auto_approve = isset($options['auto_approve']) ? $options['auto_approve'] : '0';
?>
<label>
<input type="checkbox"
name="cultural_distribution_settings[auto_approve]"
value="1" <?php checked($auto_approve, '1'); ?>>
自动批准分销商申请
</label>
<p class="description">启用后,新申请的分销商将自动获得批准</p>
<?php
}
/**
* 渲染支付方式字段
*/
public function render_payment_methods_field() {
$options = get_option('cultural_distribution_settings');
$methods = isset($options['payment_methods']) ? $options['payment_methods'] : array('alipay', 'wechat');
?>
<label>
<input type="checkbox"
name="cultural_distribution_settings[payment_methods][]"
value="alipay" <?php checked(in_array('alipay', $methods)); ?>>
支付宝
</label><br>
<label>
<input type="checkbox"
name="cultural_distribution_settings[payment_methods][]"
value="wechat" <?php checked(in_array('wechat', $methods)); ?>>
微信支付
</label><br>
<label>
<input type="checkbox"
name="cultural_distribution_settings[payment_methods][]"
value="bank" <?php checked(in_array('bank', $methods)); ?>>
银行转账
</label>
<?php
}
/**
* 添加佣金管理页面
*/
public function add_commission_management_page() {
add_submenu_page(
null, // 不显示在菜单中
'佣金管理',
'佣金管理',
'manage_options',
'cultural-commissions',
array($this, 'render_commissions_page')
);
}
/**
* 渲染佣金管理页面
*/
public function render_commissions_page() {
global $wpdb;
$table_name = $wpdb->prefix . 'cultural_commissions';
// 处理批量操作
if (isset($_POST['action']) && $_POST['action'] === 'bulk_update') {
$this->handle_bulk_commission_update();
}
// 获取佣金数据
$commissions = $wpdb->get_results(
"SELECT c.*, u.display_name, u.user_email
FROM $table_name c
LEFT JOIN {$wpdb->users} u ON c.affiliate_id = u.ID
ORDER BY c.created_at DESC
LIMIT 100"
);
?>
<div class="wrap">
<h1>佣金管理</h1>
<form method="post" action="">
<input type="hidden" name="action" value="bulk_update">
<div class="tablenav top">
<div class="alignleft actions bulkactions">
<select name="bulk_action">
<option value="">批量操作</option>
<option value="mark_paid">标记为已支付</option>
<option value="mark_pending">标记为待结算</option>
<option value="delete">删除</option>
</select>
<input type="submit" class="button action" value="应用">
</div>
</div>
<table class="wp-list-table widefat fixed striped">
<thead>
<tr>
<td class="manage-column column-cb check-column">
<input type="checkbox" id="cb-select-all-1">
</td>
<th>ID</th>
<th>分销商</th>
<th>订单号</th>
<th>佣金金额</th>
<th>状态</th>
<th>创建时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<?php foreach ($commissions as $commission): ?>
<tr>
<th scope="row" class="check-column">
<input type="checkbox" name="commission_ids[]" value="<?php echo $commission->id; ?>">
</th>
<td><?php echo $commission->id; ?></td>
<td>
<?php echo esc_html($commission->display_name); ?><br>
<small><?php echo esc_html($commission->user_email); ?></small>
</td>
<td>
