文章目录[隐藏]
WordPress文创插件实现柔性定价策略教程
引言:为什么需要柔性定价策略?
在文创产品销售中,一成不变的价格策略往往难以满足多样化的市场需求。柔性定价策略允许您根据不同的客户群体、购买数量、促销活动等因素动态调整价格,从而提高转化率和客户满意度。本教程将指导您如何在WordPress中通过自定义插件实现这一功能。
环境准备与插件基础结构
首先,我们需要创建一个基础的WordPress插件。在您的WordPress安装目录下的wp-content/plugins/文件夹中,创建一个名为flexible-pricing的新文件夹。
<?php
/**
* Plugin Name: 文创产品柔性定价
* Plugin URI: https://yourwebsite.com/
* Description: 为文创产品提供灵活的定价策略
* Version: 1.0.0
* Author: 您的名称
* License: GPL v2 or later
* Text Domain: flexible-pricing
*/
// 防止直接访问
if (!defined('ABSPATH')) {
exit;
}
// 定义插件常量
define('FLEXIBLE_PRICING_VERSION', '1.0.0');
define('FLEXIBLE_PRICING_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('FLEXIBLE_PRICING_PLUGIN_URL', plugin_dir_url(__FILE__));
// 初始化插件
add_action('plugins_loaded', 'flexible_pricing_init');
function flexible_pricing_init() {
// 检查WooCommerce是否激活(如果您的文创产品使用WooCommerce)
if (class_exists('WooCommerce')) {
// 加载核心类
require_once FLEXIBLE_PRICING_PLUGIN_DIR . 'includes/class-flexible-pricing-core.php';
$flexible_pricing = new Flexible_Pricing_Core();
$flexible_pricing->init();
} else {
// 如果没有WooCommerce,显示警告
add_action('admin_notices', function() {
echo '<div class="notice notice-error"><p>';
echo __('柔性定价插件需要WooCommerce支持。请先安装并激活WooCommerce插件。', 'flexible-pricing');
echo '</p></div>';
});
}
}
?>
核心定价策略类实现
在插件目录中创建includes/class-flexible-pricing-core.php文件:
<?php
/**
* 柔性定价核心类
* 处理所有定价逻辑和规则应用
*/
class Flexible_Pricing_Core {
private $pricing_rules = array();
public function init() {
// 加载定价规则
$this->load_pricing_rules();
// 挂钩到WooCommerce价格显示
add_filter('woocommerce_product_get_price', array($this, 'apply_pricing_rules'), 99, 2);
add_filter('woocommerce_product_get_regular_price', array($this, 'apply_pricing_rules'), 99, 2);
add_filter('woocommerce_product_variation_get_price', array($this, 'apply_pricing_rules'), 99, 2);
// 添加管理界面
add_action('admin_menu', array($this, 'add_admin_menu'));
// 保存定价规则
add_action('admin_post_save_pricing_rules', array($this, 'save_pricing_rules'));
}
/**
* 加载定价规则
*/
private function load_pricing_rules() {
// 从数据库加载规则
$this->pricing_rules = get_option('flexible_pricing_rules', array());
// 如果没有规则,设置默认规则
if (empty($this->pricing_rules)) {
$this->pricing_rules = $this->get_default_rules();
update_option('flexible_pricing_rules', $this->pricing_rules);
}
}
/**
* 获取默认定价规则
*/
private function get_default_rules() {
return array(
'user_role' => array(
'vip' => 0.8, // VIP用户享受8折
'subscriber' => 0.9 // 订阅用户享受9折
),
'quantity_tier' => array(
5 => 0.95, // 购买5件以上享受95折
10 => 0.9, // 购买10件以上享受9折
20 => 0.85 // 购买20件以上享受85折
),
'seasonal_discount' => array(
'12-25' => 0.85, // 圣诞节折扣
'01-01' => 0.9 // 元旦折扣
)
);
}
/**
* 应用定价规则到产品价格
*/
public function apply_pricing_rules($price, $product) {
if (empty($price) || !is_numeric($price)) {
return $price;
}
$original_price = $price;
$final_price = $original_price;
// 应用用户角色折扣
$final_price = $this->apply_user_role_discount($final_price);
// 应用数量阶梯折扣(需要在购物车环境中)
$final_price = $this->apply_quantity_discount($final_price, $product);
// 应用季节性折扣
$final_price = $this->apply_seasonal_discount($final_price);
// 确保价格不会低于成本价(假设成本价为原价的50%)
$cost_price = $original_price * 0.5;
if ($final_price < $cost_price) {
$final_price = $cost_price;
}
return round($final_price, 2);
}
/**
* 应用用户角色折扣
*/
private function apply_user_role_discount($price) {
if (!is_user_logged_in()) {
return $price;
}
$user = wp_get_current_user();
$user_roles = $user->roles;
foreach ($user_roles as $role) {
if (isset($this->pricing_rules['user_role'][$role])) {
$discount = $this->pricing_rules['user_role'][$role];
return $price * $discount;
}
}
return $price;
}
/**
* 应用数量阶梯折扣
*/
private function apply_quantity_discount($price, $product) {
// 仅在购物车页面应用数量折扣
if (!is_cart() && !is_checkout()) {
return $price;
}
$product_id = $product->get_id();
$cart_item_quantities = $this->get_cart_item_quantities();
if (isset($cart_item_quantities[$product_id])) {
$quantity = $cart_item_quantities[$product_id];
// 查找适用的数量阶梯
$applicable_discount = 1;
krsort($this->pricing_rules['quantity_tier']);
foreach ($this->pricing_rules['quantity_tier'] as $min_quantity => $discount) {
if ($quantity >= $min_quantity) {
$applicable_discount = $discount;
break;
}
}
return $price * $applicable_discount;
}
return $price;
}
/**
* 获取购物车中商品数量
*/
private function get_cart_item_quantities() {
if (!WC()->cart) {
return array();
}
$quantities = array();
foreach (WC()->cart->get_cart() as $cart_item) {
$product_id = $cart_item['product_id'];
$quantities[$product_id] = $cart_item['quantity'];
}
return $quantities;
}
/**
* 应用季节性折扣
*/
private function apply_seasonal_discount($price) {
$current_date = date('m-d');
if (isset($this->pricing_rules['seasonal_discount'][$current_date])) {
$discount = $this->pricing_rules['seasonal_discount'][$current_date];
return $price * $discount;
}
return $price;
}
/**
* 添加管理菜单
*/
public function add_admin_menu() {
add_submenu_page(
'woocommerce',
__('柔性定价策略', 'flexible-pricing'),
__('柔性定价', 'flexible-pricing'),
'manage_options',
'flexible-pricing',
array($this, 'render_admin_page')
);
}
/**
* 渲染管理页面
*/
public function render_admin_page() {
?>
<div class="wrap">
<h1><?php echo esc_html__('文创产品柔性定价策略', 'flexible-pricing'); ?></h1>
<form method="post" action="<?php echo admin_url('admin-post.php'); ?>">
<input type="hidden" name="action" value="save_pricing_rules">
<h2><?php echo esc_html__('用户角色折扣', 'flexible-pricing'); ?></h2>
<table class="form-table">
<tr>
<th><?php echo esc_html__('VIP用户折扣', 'flexible-pricing'); ?></th>
<td>
<input type="number" name="user_role[vip]"
value="<?php echo esc_attr($this->pricing_rules['user_role']['vip'] * 100); ?>"
min="1" max="100" step="1"> %
<p class="description"><?php echo esc_html__('VIP用户享受的折扣百分比', 'flexible-pricing'); ?></p>
</td>
</tr>
<!-- 可以添加更多用户角色 -->
</table>
<h2><?php echo esc_html__('数量阶梯折扣', 'flexible-pricing'); ?></h2>
<table class="form-table">
<?php foreach ($this->pricing_rules['quantity_tier'] as $quantity => $discount): ?>
<tr>
<th><?php printf(esc_html__('购买%s件以上', 'flexible-pricing'), $quantity); ?></th>
<td>
<input type="number" name="quantity_tier[<?php echo esc_attr($quantity); ?>]"
value="<?php echo esc_attr($discount * 100); ?>"
min="1" max="100" step="1"> %
</td>
</tr>
<?php endforeach; ?>
</table>
<?php submit_button(__('保存设置', 'flexible-pricing')); ?>
</form>
</div>
<?php
}
/**
* 保存定价规则
*/
public function save_pricing_rules() {
// 检查权限
if (!current_user_can('manage_options')) {
wp_die(__('您没有权限执行此操作。', 'flexible-pricing'));
}
// 验证nonce(安全令牌)
check_admin_referer('save_pricing_rules_nonce');
// 处理并保存数据
if (isset($_POST['user_role'])) {
foreach ($_POST['user_role'] as $role => $discount_percent) {
$this->pricing_rules['user_role'][$role] = floatval($discount_percent) / 100;
}
}
if (isset($_POST['quantity_tier'])) {
$this->pricing_rules['quantity_tier'] = array();
foreach ($_POST['quantity_tier'] as $quantity => $discount_percent) {
$quantity = intval($quantity);
$this->pricing_rules['quantity_tier'][$quantity] = floatval($discount_percent) / 100;
}
ksort($this->pricing_rules['quantity_tier']);
}
update_option('flexible_pricing_rules', $this->pricing_rules);
// 重定向回设置页面
wp_redirect(admin_url('admin.php?page=flexible-pricing&saved=true'));
exit;
}
}
?>
前端价格显示增强
为了让客户清楚地看到折扣信息,我们需要在前端显示价格变化。创建assets/js/flexible-pricing-frontend.js:
/**
* 前端价格显示增强
* 动态显示折扣信息和节省金额
*/
jQuery(document).ready(function($) {
// 监听价格变化
$(document).on('found_variation', 'form.cart', function(event, variation) {
displayDiscountInfo(variation);
});
// 显示折扣信息
function displayDiscountInfo(variation) {
var originalPrice = variation.display_price;
var discountedPrice = variation.price_html;
// 这里可以添加逻辑来比较原价和折扣价
// 并显示节省的金额
$('.product-price').append(
'<div class="discount-info">' +
'<span class="you-save">节省: ' +
calculateSavings(originalPrice, discountedPrice) +
'</span>' +
'</div>'
);
}
// 计算节省金额
function calculateSavings(original, discounted) {
// 这里需要根据实际情况解析价格
// 简化示例:
var savings = original - discounted;
return wc_price(savings);
}
// 购物车页面显示折扣摘要
if ($('body').hasClass('cart')) {
updateCartDiscountSummary();
}
// 更新购物车折扣摘要
function updateCartDiscountSummary() {
$.ajax({
url: flexible_pricing_ajax.ajax_url,
type: 'POST',
data: {
action: 'get_cart_discount_summary',
security: flexible_pricing_ajax.nonce
},
success: function(response) {
if (response.success) {
$('.cart_totals').before(response.data.summary_html);
}
}
});
}
});
高级定价策略扩展
除了基本的折扣策略,您还可以扩展更多高级功能。在插件中添加以下类:
<?php
/**
* 高级定价策略扩展
* 包括捆绑销售、动态定价、会员专享价等
*/
class Flexible_Pricing_Extensions {
/**
* 捆绑销售折扣
* 当用户购买特定产品组合时提供额外折扣
*/
public static function apply_bundle_discount($cart) {
$bundle_products = array(101, 102, 103); // 产品ID数组
$bundle_discount = 0.8; // 8折
$cart_products = array();
foreach ($cart->get_cart() as $cart_item) {
$cart_products[] = $cart_item['product_id'];
}
// 检查购物车是否包含所有捆绑产品
$has_all_bundle_products = empty(array_diff($bundle_products, $cart_products));
if ($has_all_bundle_products) {
foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
if (in_array($cart_item['product_id'], $bundle_products)) {
$cart_item['data']->set_price(
$cart_item['data']->get_price() * $bundle_discount
);
}
}
}
}
/**
* 动态定价基于库存
* 库存较少时提高价格,库存充足时降低价格促进销售
*/
public static function dynamic_pricing_by_stock($price, $product) {
$stock_quantity = $product->get_stock_quantity();
if ($stock_quantity !== null) {
if ($stock_quantity < 10) {
// 库存紧张,价格上浮10%
return $price * 1.1;
} elseif ($stock_quantity > 100) {
// 库存充足,价格下调5%促进销售
return $price * 0.95;
}
}
return $price;
}
/**
* 时间敏感定价
* 根据一天中的不同时间调整价格
*/
public static function time_sensitive_pricing($price) {
$current_hour = date('H');
// 深夜促销 (0点-6点)
if ($current_hour >= 0 && $current_hour < 6) {
return $price * 0.9; // 9折
}
// 午间特惠 (12点-14点)
if ($current_hour >= 12 && $current_hour < 14) {
return $price * 0.95; // 95折
}
return $price;
}
}
?>
测试与部署建议
在部署柔性定价插件前,请务必进行充分测试:
- 单元测试:测试每个定价规则函数
- 集成测试:测试规则组合应用
- 性能测试:确保不影响网站加载速度
- 用户验收测试:让真实用户测试购买流程
建议的部署步骤:
- 在开发环境中完成所有测试
- 在生产环境的测试站点验证
- 使用分阶段部署,先对部分用户开放
- 监控销售数据和用户反馈
- 根据数据调整定价参数
总结
通过本教程,您已经学会了如何在WordPress中创建柔性定价插件。这种灵活的定价策略可以帮助您:
- 提高文创产品的竞争力
- 增加客户满意度和忠诚度
- 优化库存管理和销售策略
- 最大化收入和利润
记住,定价策略需要根据市场反馈不断调整。建议定期分析销售数据,了解不同定价策略的效果,并持续优化您的定价模型。
您可以根据自己的具体需求扩展这个基础插件,添加更多定价规则和高级功能,如A/B测试不同价格点、机器学习预测最优价格等。祝您的文创产品销售取得成功!
WordPress文创插件实现柔性定价策略教程(续)
数据库设计与规则存储优化
为了实现更复杂的定价策略,我们需要优化数据库设计。创建includes/class-database-manager.php:
<?php
/**
* 数据库管理器
* 处理定价规则的存储和检索
*/
class Flexible_Pricing_Database {
private $table_rules;
private $table_rule_meta;
public function __construct() {
global $wpdb;
$this->table_rules = $wpdb->prefix . 'flexible_pricing_rules';
$this->table_rule_meta = $wpdb->prefix . 'flexible_pricing_rule_meta';
}
/**
* 创建数据库表
*/
public function create_tables() {
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
// 主规则表
$sql_rules = "CREATE TABLE IF NOT EXISTS {$this->table_rules} (
rule_id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
rule_name VARCHAR(200) NOT NULL,
rule_type VARCHAR(50) NOT NULL,
rule_priority INT(11) NOT NULL DEFAULT 10,
rule_status TINYINT(1) NOT NULL DEFAULT 1,
start_date DATETIME DEFAULT NULL,
end_date DATETIME DEFAULT NULL,
conditions TEXT,
actions TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (rule_id),
KEY rule_type (rule_type),
KEY rule_status (rule_status),
KEY rule_priority (rule_priority)
) $charset_collate;";
// 规则元数据表
$sql_meta = "CREATE TABLE IF NOT EXISTS {$this->table_rule_meta} (
meta_id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
rule_id BIGINT(20) UNSIGNED NOT NULL,
meta_key VARCHAR(255) NOT NULL,
meta_value LONGTEXT,
PRIMARY KEY (meta_id),
KEY rule_id (rule_id),
KEY meta_key (meta_key)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql_rules);
dbDelta($sql_meta);
}
/**
* 获取所有活跃的定价规则
*/
public function get_active_rules($product_id = null, $user_id = null) {
global $wpdb;
$current_time = current_time('mysql');
$sql = "SELECT r.* FROM {$this->table_rules} r
WHERE r.rule_status = 1
AND (r.start_date IS NULL OR r.start_date <= %s)
AND (r.end_date IS NULL OR r.end_date >= %s)";
$params = array($current_time, $current_time);
// 如果有产品ID,添加产品条件
if ($product_id) {
$sql .= " AND EXISTS (
SELECT 1 FROM {$this->table_rule_meta} rm
WHERE rm.rule_id = r.rule_id
AND rm.meta_key = 'applicable_products'
AND (rm.meta_value = 'all' OR FIND_IN_SET(%d, rm.meta_value))
)";
$params[] = $product_id;
}
// 如果有用户ID,添加用户条件
if ($user_id) {
$user = get_userdata($user_id);
$user_roles = $user->roles;
$sql .= " AND EXISTS (
SELECT 1 FROM {$this->table_rule_meta} rm
WHERE rm.rule_id = r.rule_id
AND rm.meta_key = 'applicable_user_roles'
AND (rm.meta_value = 'all' OR ";
$role_conditions = array();
foreach ($user_roles as $role) {
$role_conditions[] = "FIND_IN_SET(%s, rm.meta_value)";
$params[] = $role;
}
$sql .= implode(' OR ', $role_conditions) . ")
)";
}
$sql .= " ORDER BY r.rule_priority ASC, r.rule_id ASC";
return $wpdb->get_results($wpdb->prepare($sql, $params));
}
/**
* 保存定价规则
*/
public function save_rule($rule_data) {
global $wpdb;
$defaults = array(
'rule_name' => '',
'rule_type' => 'discount',
'rule_priority' => 10,
'rule_status' => 1,
'start_date' => null,
'end_date' => null,
'conditions' => '',
'actions' => '',
'meta_data' => array()
);
$rule_data = wp_parse_args($rule_data, $defaults);
// 序列化条件和动作
if (is_array($rule_data['conditions'])) {
$rule_data['conditions'] = maybe_serialize($rule_data['conditions']);
}
if (is_array($rule_data['actions'])) {
$rule_data['actions'] = maybe_serialize($rule_data['actions']);
}
// 保存主规则
$result = $wpdb->insert(
$this->table_rules,
array(
'rule_name' => sanitize_text_field($rule_data['rule_name']),
'rule_type' => sanitize_text_field($rule_data['rule_type']),
'rule_priority' => intval($rule_data['rule_priority']),
'rule_status' => intval($rule_data['rule_status']),
'start_date' => $rule_data['start_date'],
'end_date' => $rule_data['end_date'],
'conditions' => $rule_data['conditions'],
'actions' => $rule_data['actions']
),
array('%s', '%s', '%d', '%d', '%s', '%s', '%s', '%s')
);
if (!$result) {
return false;
}
$rule_id = $wpdb->insert_id;
// 保存元数据
foreach ($rule_data['meta_data'] as $key => $value) {
$this->save_rule_meta($rule_id, $key, $value);
}
return $rule_id;
}
/**
* 保存规则元数据
*/
private function save_rule_meta($rule_id, $key, $value) {
global $wpdb;
if (is_array($value)) {
$value = maybe_serialize($value);
}
return $wpdb->insert(
$this->table_rule_meta,
array(
'rule_id' => $rule_id,
'meta_key' => sanitize_text_field($key),
'meta_value' => $value
),
array('%d', '%s', '%s')
);
}
/**
* 获取规则的所有元数据
*/
public function get_rule_meta($rule_id) {
global $wpdb;
$results = $wpdb->get_results(
$wpdb->prepare(
"SELECT meta_key, meta_value FROM {$this->table_rule_meta} WHERE rule_id = %d",
$rule_id
)
);
$meta_data = array();
foreach ($results as $row) {
$meta_data[$row->meta_key] = maybe_unserialize($row->meta_value);
}
return $meta_data;
}
}
?>
规则引擎与条件评估系统
创建强大的规则引擎来处理复杂的定价逻辑:
<?php
/**
* 规则引擎
* 评估条件并执行相应的定价动作
*/
class Flexible_Pricing_Rule_Engine {
private $db;
private $current_context;
public function __construct() {
$this->db = new Flexible_Pricing_Database();
$this->current_context = array();
}
/**
* 设置当前上下文
*/
public function set_context($context) {
$this->current_context = wp_parse_args($context, array(
'product_id' => null,
'user_id' => null,
'quantity' => 1,
'cart_total' => 0,
'user_role' => null,
'purchase_history' => array(),
'current_time' => current_time('timestamp')
));
}
/**
* 评估所有适用的规则
*/
public function evaluate_rules() {
$rules = $this->db->get_active_rules(
$this->current_context['product_id'],
$this->current_context['user_id']
);
$applicable_rules = array();
foreach ($rules as $rule) {
if ($this->evaluate_rule_conditions($rule)) {
$applicable_rules[] = $rule;
}
}
return $applicable_rules;
}
/**
* 评估单个规则的条件
*/
private function evaluate_rule_conditions($rule) {
$conditions = maybe_unserialize($rule->conditions);
if (empty($conditions)) {
return true;
}
foreach ($conditions as $condition) {
if (!$this->evaluate_single_condition($condition)) {
return false;
}
}
return true;
}
/**
* 评估单个条件
*/
private function evaluate_single_condition($condition) {
$condition_type = $condition['type'] ?? '';
$operator = $condition['operator'] ?? '';
$value = $condition['value'] ?? '';
switch ($condition_type) {
case 'user_role':
return $this->evaluate_user_role_condition($operator, $value);
case 'purchase_history':
return $this->evaluate_purchase_history_condition($operator, $value);
case 'cart_total':
return $this->evaluate_cart_total_condition($operator, $value);
case 'product_category':
return $this->evaluate_product_category_condition($operator, $value);
case 'date_range':
return $this->evaluate_date_range_condition($operator, $value);
case 'time_of_day':
return $this->evaluate_time_of_day_condition($operator, $value);
default:
return true;
}
}
/**
* 评估用户角色条件
*/
private function evaluate_user_role_condition($operator, $value) {
$user_roles = $this->current_context['user_role'] ?? array();
if (empty($user_roles)) {
$user = wp_get_current_user();
$user_roles = $user->roles;
}
switch ($operator) {
case 'is':
return in_array($value, $user_roles);
case 'is_not':
return !in_array($value, $user_roles);
case 'includes_any':
$required_roles = is_array($value) ? $value : explode(',', $value);
return !empty(array_intersect($required_roles, $user_roles));
default:
return true;
}
}
/**
* 评估购买历史条件
*/
private function evaluate_purchase_history_condition($operator, $value) {
$purchase_history = $this->current_context['purchase_history'];
$total_spent = $purchase_history['total_spent'] ?? 0;
$order_count = $purchase_history['order_count'] ?? 0;
list($field, $comparison_value) = explode(':', $value);
switch ($field) {
case 'total_spent':
$actual_value = $total_spent;
break;
case 'order_count':
$actual_value = $order_count;
break;
default:
return true;
}
return $this->compare_values($actual_value, $operator, $comparison_value);
}
/**
* 评估购物车总额条件
*/
private function evaluate_cart_total_condition($operator, $value) {
$cart_total = $this->current_context['cart_total'];
return $this->compare_values($cart_total, $operator, $value);
}
/**
* 比较数值
*/
private function compare_values($actual, $operator, $expected) {
switch ($operator) {
case 'greater_than':
return $actual > $expected;
case 'less_than':
return $actual < $expected;
case 'equals':
return $actual == $expected;
case 'not_equals':
return $actual != $expected;
case 'greater_than_or_equals':
return $actual >= $expected;
case 'less_than_or_equals':
return $actual <= $expected;
default:
return true;
}
}
/**
* 执行规则动作
*/
public function execute_rule_actions($rules, $base_price) {
$final_price = $base_price;
$applied_discounts = array();
foreach ($rules as $rule) {
$actions = maybe_unserialize($rule->actions);
foreach ($actions as $action) {
$result = $this->execute_single_action($action, $final_price);
if ($result['price'] != $final_price) {
$final_price = $result['price'];
$applied_discounts[] = array(
'rule_name' => $rule->rule_name,
'discount_amount' => $base_price - $final_price,
'discount_type' => $action['type']
);
}
}
}
return array(
'final_price' => $final_price,
'applied_discounts' => $applied_discounts
);
}
/**
* 执行单个动作
*/
private function execute_single_action($action, $current_price) {
$action_type = $action['type'] ?? '';
$value = $action['value'] ?? 0;
switch ($action_type) {
case 'percentage_discount':
$discount = $current_price * ($value / 100);
return array(
'price' => max($current_price - $discount, 0),
'type' => 'percentage'
);
case 'fixed_discount':
return array(
'price' => max($current_price - $value, 0),
'type' => 'fixed'
);
case 'fixed_price':
return array(
'price' => $value,
'type' => 'fixed_price'
);
case 'multiply_price':
return array(
'price' => $current_price * $value,
'type' => 'multiply'
);
default:
return array(
'price' => $current_price,
'type' => 'none'
);
}
}
}
?>
高级管理界面与规则构建器
创建直观的管理界面,让非技术人员也能轻松创建定价规则:
<?php
/**
* 规则构建器界面
* 提供拖放式规则创建界面
*/
class Flexible_Pricing_Rule_Builder {
public function render_rule_builder() {
wp_enqueue_script('flexible-pricing-builder');
wp_enqueue_style('flexible-pricing-builder-css');
?>
<div class="wrap">
<h1><?php _e('定价规则构建器', 'flexible-pricing'); ?></h1>
<div id="rule-builder-app">
<!-- Vue.js或React应用容器 -->
<div class="rule-builder-container">
<!-- 规则基本信息 -->
<div class="rule-basic-info">
<div class="form-group">
<label for="rule-name"><?php _e('规则名称', 'flexible-pricing'); ?></label>
<input type="text" id="rule-name" v-model="ruleName"
placeholder="<?php esc_attr_e('例如:VIP用户专属折扣', 'flexible-pricing'); ?>">
</div>
<div class="form-group">
<label for="rule-priority"><?php _e('规则优先级', 'flexible-pricing'); ?></label>
<input type="number" id="rule-priority" v-model="rulePriority" min="1" max="100">
<p class="description"><?php _e('数字越小优先级越高', 'flexible-pricing'); ?></p>
</div>
</div>
<!-- 条件构建器 -->
<div class="conditions-builder">
<h3><?php _e('条件', 'flexible-pricing'); ?></h3>
<div class="condition-group" v-for="(condition, index) in conditions">
<select v-model="condition.type" @change="updateConditionOptions(index)">
<option value="user_role"><?php _e('用户角色', 'flexible-pricing'); ?></option>
<option value="purchase_history"><?php _e('购买历史', 'flexible-pricing'); ?></option>
<option value="cart_total"><?php _e('购物车总额', 'flexible-pricing'); ?></option>
<option value="product_category"><?php _e('产品分类', 'flexible-pricing'); ?></option>
<option value="date_range"><?php _e('日期范围', 'flexible-pricing'); ?></option>
</select>
<select v-model="condition.operator">
<option v-for="op in getOperatorsForType(condition.type)"
:value="op.value">{{ op.label }}</option>
</select>
<input type="text" v-model="condition.value"
:placeholder="getValuePlaceholder(condition.type)">
<button class="button button-small"
@click="removeCondition(index)"><?php _e('删除', 'flexible-pricing'); ?></button>
</div>
