WordPress文创IP柔性跨界合作插件开发实战教程
一、项目背景与需求分析
在文创产业蓬勃发展的今天,IP跨界合作已成为品牌拓展的重要方式。然而,许多文创机构在WordPress网站上缺乏专业的合作对接系统。本教程将带领大家开发一个完整的文创IP柔性跨界合作插件,实现合作申请、IP展示、智能匹配等功能。
核心需求:
- IP资源展示与管理
- 合作方在线申请系统
- 智能匹配推荐功能
- 合作流程跟踪管理
- 数据统计与分析
二、开发环境准备与插件基础结构
首先,我们需要创建插件的基础结构。在WordPress的wp-content/plugins/目录下创建新文件夹cultural-ip-cooperation。
<?php
/**
* Plugin Name: 文创IP跨界合作系统
* Plugin URI: https://example.com/cultural-ip-cooperation
* Description: 文创IP柔性跨界合作管理插件
* Version: 1.0.0
* Author: 文创开发者
* License: GPL v2 or later
* Text Domain: cultural-ip-cooperation
*/
// 防止直接访问
if (!defined('ABSPATH')) {
exit;
}
// 定义插件常量
define('CIC_VERSION', '1.0.0');
define('CIC_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('CIC_PLUGIN_URL', plugin_dir_url(__FILE__));
// 初始化插件
class CulturalIPCooperation {
private static $instance = null;
public static function get_instance() {
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
private function __construct() {
$this->init_hooks();
}
// 初始化钩子
private function init_hooks() {
add_action('init', array($this, 'register_post_types'));
add_action('admin_menu', array($this, 'add_admin_menu'));
add_action('wp_enqueue_scripts', array($this, 'enqueue_frontend_assets'));
add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_assets'));
// 短码注册
add_shortcode('ip_cooperation_form', array($this, 'render_cooperation_form'));
add_shortcode('ip_showcase', array($this, 'render_ip_showcase'));
}
// 注册自定义文章类型
public function register_post_types() {
$this->register_ip_post_type();
$this->register_cooperation_post_type();
}
// 更多方法将在后续实现...
}
// 启动插件
CulturalIPCooperation::get_instance();
?>
三、IP资源管理模块开发
接下来,我们创建IP资源管理的自定义文章类型和相关功能。
<?php
// 在CulturalIPCooperation类中添加方法
/**
* 注册IP资源自定义文章类型
*/
private function register_ip_post_type() {
$labels = array(
'name' => __('IP资源', 'cultural-ip-cooperation'),
'singular_name' => __('IP资源', 'cultural-ip-cooperation'),
'menu_name' => __('IP管理', 'cultural-ip-cooperation'),
'add_new' => __('添加新IP', 'cultural-ip-cooperation'),
'add_new_item' => __('添加新IP资源', 'cultural-ip-cooperation'),
'edit_item' => __('编辑IP资源', 'cultural-ip-cooperation'),
'new_item' => __('新IP资源', 'cultural-ip-cooperation'),
'view_item' => __('查看IP资源', 'cultural-ip-cooperation'),
'search_items' => __('搜索IP资源', 'cultural-ip-cooperation'),
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => 'ip-resource'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 30,
'menu_icon' => 'dashicons-art',
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'taxonomies' => array('ip_category', 'ip_tag')
);
register_post_type('ip_resource', $args);
// 注册IP分类
$this->register_ip_taxonomies();
}
/**
* 注册IP分类法
*/
private function register_ip_taxonomies() {
// IP分类
register_taxonomy(
'ip_category',
'ip_resource',
array(
'labels' => array(
'name' => __('IP分类', 'cultural-ip-cooperation'),
'singular_name' => __('IP分类', 'cultural-ip-cooperation'),
),
'hierarchical' => true,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'ip-category'),
)
);
// IP标签
register_taxonomy(
'ip_tag',
'ip_resource',
array(
'labels' => array(
'name' => __('IP标签', 'cultural-ip-cooperation'),
'singular_name' => __('IP标签', 'cultural-ip-cooperation'),
),
'hierarchical' => false,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'ip-tag'),
)
);
}
/**
* 添加IP资源元数据框
*/
public function add_ip_meta_boxes() {
add_meta_box(
'ip_details',
__('IP详细信息', 'cultural-ip-cooperation'),
array($this, 'render_ip_meta_box'),
'ip_resource',
'normal',
'high'
);
}
/**
* 渲染IP元数据框
*/
public function render_ip_meta_box($post) {
// 获取现有值
$ip_type = get_post_meta($post->ID, '_ip_type', true);
$cooperation_mode = get_post_meta($post->ID, '_cooperation_mode', true);
$target_industry = get_post_meta($post->ID, '_target_industry', true);
$popularity_score = get_post_meta($post->ID, '_popularity_score', true) ?: 0;
// 添加nonce字段用于安全验证
wp_nonce_field('save_ip_meta', 'ip_meta_nonce');
// HTML表单
?>
<div class="ip-meta-fields">
<p>
<label for="ip_type"><?php _e('IP类型:', 'cultural-ip-cooperation'); ?></label>
<select id="ip_type" name="ip_type">
<option value="character" <?php selected($ip_type, 'character'); ?>><?php _e('角色形象', 'cultural-ip-cooperation'); ?></option>
<option value="story" <?php selected($ip_type, 'story'); ?>><?php _e('故事内容', 'cultural-ip-cooperation'); ?></option>
<option value="art" <?php selected($ip_type, 'art'); ?>><?php _e('艺术设计', 'cultural-ip-cooperation'); ?></option>
<option value="brand" <?php selected($ip_type, 'brand'); ?>><?php _e('品牌IP', 'cultural-ip-cooperation'); ?></option>
</select>
</p>
<p>
<label for="cooperation_mode"><?php _e('合作模式:', 'cultural-ip-cooperation'); ?></label>
<select id="cooperation_mode" name="cooperation_mode" multiple>
<option value="licensing" <?php selected(in_array('licensing', explode(',', $cooperation_mode))); ?>><?php _e('授权许可', 'cultural-ip-cooperation'); ?></option>
<option value="co-branding" <?php selected(in_array('co-branding', explode(',', $cooperation_mode))); ?>><?php _e('联合品牌', 'cultural-ip-cooperation'); ?></option>
<option value="product" <?php selected(in_array('product', explode(',', $cooperation_mode))); ?>><?php _e('产品开发', 'cultural-ip-cooperation'); ?></option>
<option value="marketing" <?php selected(in_array('marketing', explode(',', $cooperation_mode))); ?>><?php _e('营销推广', 'cultural-ip-cooperation'); ?></option>
</select>
</p>
<p>
<label for="target_industry"><?php _e('目标行业:', 'cultural-ip-cooperation'); ?></label>
<input type="text" id="target_industry" name="target_industry" value="<?php echo esc_attr($target_industry); ?>" placeholder="<?php _e('用逗号分隔多个行业', 'cultural-ip-cooperation'); ?>">
</p>
<p>
<label for="popularity_score"><?php _e('热度评分 (0-100):', 'cultural-ip-cooperation'); ?></label>
<input type="range" id="popularity_score" name="popularity_score" min="0" max="100" value="<?php echo esc_attr($popularity_score); ?>">
<span id="score_display"><?php echo esc_html($popularity_score); ?></span>
</p>
</div>
<script>
jQuery(document).ready(function($) {
// 实时显示评分值
$('#popularity_score').on('input', function() {
$('#score_display').text($(this).val());
});
});
</script>
<?php
}
/**
* 保存IP元数据
*/
public function save_ip_meta($post_id) {
// 安全检查
if (!isset($_POST['ip_meta_nonce']) ||
!wp_verify_nonce($_POST['ip_meta_nonce'], 'save_ip_meta')) {
return;
}
// 检查自动保存
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
// 检查权限
if (!current_user_can('edit_post', $post_id)) {
return;
}
// 保存字段
$fields = array('ip_type', 'cooperation_mode', 'target_industry', 'popularity_score');
foreach ($fields as $field) {
if (isset($_POST[$field])) {
$value = is_array($_POST[$field]) ?
implode(',', $_POST[$field]) :
sanitize_text_field($_POST[$field]);
update_post_meta($post_id, '_' . $field, $value);
}
}
}
?>
四、合作申请表单模块
创建前端合作申请表单,让潜在合作伙伴可以提交申请。
<?php
/**
* 渲染合作申请表单短码
*/
public function render_cooperation_form($atts) {
// 短码属性处理
$atts = shortcode_atts(array(
'ip_id' => 0,
'title' => __('合作申请', 'cultural-ip-cooperation'),
), $atts, 'ip_cooperation_form');
// 如果未登录,显示登录提示
if (!is_user_logged_in()) {
return '<div class="cic-notice">' .
__('请先登录后再提交合作申请', 'cultural-ip-cooperation') .
' <a href="' . wp_login_url(get_permalink()) . '">' .
__('登录', 'cultural-ip-cooperation') . '</a></div>';
}
ob_start();
?>
<div class="cic-cooperation-form">
<h3><?php echo esc_html($atts['title']); ?></h3>
<?php if (isset($_GET['success']) && $_GET['success'] == '1'): ?>
<div class="cic-alert cic-alert-success">
<?php _e('申请提交成功!我们会尽快与您联系。', 'cultural-ip-cooperation'); ?>
</div>
<?php endif; ?>
<form id="cic-cooperation-form" method="post" action="<?php echo admin_url('admin-ajax.php'); ?>">
<input type="hidden" name="action" value="submit_cooperation_application">
<input type="hidden" name="ip_id" value="<?php echo esc_attr($atts['ip_id']); ?>">
<?php wp_nonce_field('cooperation_application', 'cic_nonce'); ?>
<div class="form-group">
<label for="company_name"><?php _e('公司/机构名称 *', 'cultural-ip-cooperation'); ?></label>
<input type="text" id="company_name" name="company_name" required>
</div>
<div class="form-group">
<label for="contact_person"><?php _e('联系人 *', 'cultural-ip-cooperation'); ?></label>
<input type="text" id="contact_person" name="contact_person" required>
</div>
<div class="form-group">
<label for="contact_email"><?php _e('联系邮箱 *', 'cultural-ip-cooperation'); ?></label>
<input type="email" id="contact_email" name="contact_email" required>
</div>
<div class="form-group">
<label for="contact_phone"><?php _e('联系电话', 'cultural-ip-cooperation'); ?></label>
<input type="tel" id="contact_phone" name="contact_phone">
</div>
<div class="form-group">
<label for="industry"><?php _e('所属行业 *', 'cultural-ip-cooperation'); ?></label>
<select id="industry" name="industry" required>
<option value=""><?php _e('请选择行业', 'cultural-ip-cooperation'); ?></option>
<option value="fashion"><?php _e('时尚服饰', 'cultural-ip-cooperation'); ?></option>
<option value="cosmetics"><?php _e('美妆个护', 'cultural-ip-cooperation'); ?></option>
<option value="food"><?php _e('食品饮料', 'cultural-ip-cooperation'); ?></option>
<option value="digital"><?php _e('数码电子', 'cultural-ip-cooperation'); ?></option>
<option value="entertainment"><?php _e('文娱影视', 'cultural-ip-cooperation'); ?></option>
<option value="other"><?php _e('其他', 'cultural-ip-cooperation'); ?></option>
</select>
</div>
<div class="form-group">
<label for="cooperation_type"><?php _e('合作类型 *', 'cultural-ip-cooperation'); ?></label>
<select id="cooperation_type" name="cooperation_type" required>
<option value=""><?php _e('请选择合作类型', 'cultural-ip-cooperation'); ?></option>
<option value="product"><?php _e('产品开发', 'cultural-ip-cooperation'); ?></option>
<option value="licensing"><?php _e('IP授权', 'cultural-ip-cooperation'); ?></option>
<option value="marketing"><?php _e('联合营销', 'cultural-ip-cooperation'); ?></option>
<option value="event"><?php _e('活动合作', 'cultural-ip-cooperation'); ?></option>
</select>
</div>
<div class="form-group">
<label for="budget_range"><?php _e('预算范围', 'cultural-ip-cooperation'); ?></label>
<select id="budget_range" name="budget_range">
<option value=""><?php _e('请选择预算范围', 'cultural-ip-cooperation'); ?></option>
<option value="under_50k"><?php _e('5万以下', 'cultural-ip-cooperation'); ?></option>
<option value="50k_200k"><?php _e('5-20万', 'cultural-ip-cooperation'); ?></option>
<option value="200k_500k"><?php _e('20-50万', 'cultural-ip-cooperation'); ?></option>
<option value="over_500k"><?php _e('50万以上', 'cultural-ip-cooperation'); ?></option>
</select>
</div>
<div class="form-group">
<label for="cooperation_details"><?php _e('合作意向描述 *', 'cultural-ip-cooperation'); ?></label>
<textarea id="cooperation_details" name="cooperation_details" rows="5" required></textarea>
</div>
<div class="form-group">
<label for="additional_info"><?php _e('补充信息', 'cultural-ip-cooperation'); ?></label>
<textarea id="additional_info" name="additional_info" rows="3"></textarea>
</div>
<div class="form-group">
<button type="submit" class="cic-submit-btn">
<?php _e('提交申请', 'cultural-ip-cooperation'); ?>
</button>
</div>
</form>
<div id="cic-form-message" class="cic-alert" style="display:none;"></div>
</div>
<script>
jQuery(document).ready(function($) {
$('#cic-cooperation-form').on('submit', function(e) {
e.preventDefault();
var form = $(this);
var submitBtn = form.find('.cic-submit-btn');
var messageDiv = $('#cic-form-message');
// 禁用提交按钮防止重复提交
submitBtn.prop('disabled', true).text('<?php _e("提交中...", "cultural-ip-cooperation"); ?>');
messageDiv.hide().removeClass('cic-alert-success cic-alert-error');
// AJAX提交
$.ajax({
url: form.attr('action'),
type: 'POST',
data: form.serialize(),
success: function(response) {
if (response.success) {
messageDiv.addClass('cic-alert-success').text(response.data.message).show();
form[0].reset();
// 重定向到成功页面
setTimeout(function() {
window.location.href = window.location.href + '?success=1';
}, 1500);
} else {
messageDiv.addClass('cic-alert-error').text(response.data.message).show();
}
},
error: function() {
messageDiv.addClass('cic-alert-error').text('<?php _e("提交失败,请稍后重试", "cultural-ip-cooperation"); ?>').show();
},
complete: function() {
submitBtn.prop('disabled', false).text('<?php _e("提交申请", "cultural-ip-cooperation"); ?>');
}
});
});
});
</script>
<?php
return ob_get_clean();
}
/**
- 处理合作申请AJAX提交
*/
public function handle_cooperation_submission() {
// 验证nonce
if (!isset($_POST['cic_nonce']) ||
!wp_verify_nonce($_POST['cic_nonce'], 'cooperation_application')) {
wp_send_json_error(array('message' => __('安全验证失败', 'cultural-ip-cooperation')));
}
// 验证用户登录状态
if (!is_user_logged_in()) {
wp_send_json_error(array('message' => __('请先登录', 'cultural-ip-cooperation')));
}
// 验证必填字段
$required_fields = array('company_name', 'contact_person', 'contact_email', 'industry', 'cooperation_type', 'cooperation_details');
foreach ($required_fields as $field) {
if (empty($_POST[$field])) {
wp_send_json_error(array('message' => sprintf(__('请填写%s', 'cultural-ip-cooperation'), $field)));
}
}
// 验证邮箱格式
if (!is_email($_POST['contact_email'])) {
wp_send_json_error(array('message' => __('邮箱格式不正确', 'cultural-ip-cooperation')));
}
// 创建合作申请记录
$current_user = wp_get_current_user();
$ip_id = intval($_POST['ip_id']);
$application_data = array(
'post_title' => sprintf(__('%s的合作申请 - %s', 'cultural-ip-cooperation'),
sanitize_text_field($_POST['company_name']),
date('Y-m-d H:i:s')),
'post_content' => sanitize_textarea_field($_POST['cooperation_details']),
'post_status' => 'pending',
'post_type' => 'cooperation_application',
'post_author' => $current_user->ID,
);
$application_id = wp_insert_post($application_data);
if (is_wp_error($application_id)) {
wp_send_json_error(array('message' => __('申请提交失败,请稍后重试', 'cultural-ip-cooperation')));
}
// 保存元数据
$meta_fields = array(
'company_name' => sanitize_text_field($_POST['company_name']),
'contact_person' => sanitize_text_field($_POST['contact_person']),
'contact_email' => sanitize_email($_POST['contact_email']),
'contact_phone' => sanitize_text_field($_POST['contact_phone']),
'industry' => sanitize_text_field($_POST['industry']),
'cooperation_type'=> sanitize_text_field($_POST['cooperation_type']),
'budget_range' => sanitize_text_field($_POST['budget_range']),
'additional_info' => sanitize_textarea_field($_POST['additional_info']),
'ip_id' => $ip_id,
'user_id' => $current_user->ID,
'submission_date' => current_time('mysql'),
'status' => 'pending_review',
);
foreach ($meta_fields as $key => $value) {
update_post_meta($application_id, '_' . $key, $value);
}
// 发送通知邮件
$this->send_notification_email($application_id, $meta_fields);
wp_send_json_success(array(
'message' => __('申请提交成功!', 'cultural-ip-cooperation'),
'application_id' => $application_id
));
}
/**
- 发送通知邮件
*/
private function send_notification_email($application_id, $data) {
$to = get_option('admin_email');
$subject = sprintf(__('新的文创IP合作申请 - %s', 'cultural-ip-cooperation'), $data['company_name']);
$message = sprintf(__('收到新的合作申请,详情如下:', 'cultural-ip-cooperation')) . "nn";
$message .= sprintf(__('申请ID: %s', 'cultural-ip-cooperation'), $application_id) . "n";
$message .= sprintf(__('公司名称: %s', 'cultural-ip-cooperation'), $data['company_name']) . "n";
$message .= sprintf(__('联系人: %s', 'cultural-ip-cooperation'), $data['contact_person']) . "n";
$message .= sprintf(__('联系电话: %s', 'cultural-ip-cooperation'), $data['contact_phone']) . "n";
$message .= sprintf(__('联系邮箱: %s', 'cultural-ip-cooperation'), $data['contact_email']) . "n";
$message .= sprintf(__('所属行业: %s', 'cultural-ip-cooperation'), $data['industry']) . "n";
$message .= sprintf(__('合作类型: %s', 'cultural-ip-cooperation'), $data['cooperation_type']) . "n";
$message .= sprintf(__('预算范围: %s', 'cultural-ip-cooperation'), $data['budget_range']) . "n";
$message .= sprintf(__('申请时间: %s', 'cultural-ip-cooperation'), $data['submission_date']) . "nn";
$message .= __('请登录管理后台查看详细信息:', 'cultural-ip-cooperation') . "n";
$message .= admin_url('edit.php?post_type=cooperation_application') . "n";
wp_mail($to, $subject, $message);
}
?>
## 五、智能匹配算法实现
<?php
/**
- IP智能匹配算法
- 根据合作方需求匹配最合适的IP资源
*/
public function match_ips_for_partner($partner_data) {
global $wpdb;
// 获取所有活跃的IP资源
$args = array(
'post_type' => 'ip_resource',
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => '_status',
'value' => 'active',
'compare' => '='
)
)
);
$ip_resources = get_posts($args);
$matched_ips = array();
foreach ($ip_resources as $ip) {
$score = $this->calculate_match_score($ip->ID, $partner_data);
if ($score > 0) {
$matched_ips[] = array(
'ip_id' => $ip->ID,
'title' => $ip->post_title,
'score' => $score,
'details' => $this->get_ip_match_details($ip->ID, $partner_data)
);
}
}
// 按匹配分数排序
usort($matched_ips, function($a, $b) {
return $b['score'] - $a['score'];
});
return array_slice($matched_ips, 0, 5); // 返回前5个匹配结果
}
/**
- 计算匹配分数
*/
private function calculate_match_score($ip_id, $partner_data) {
$score = 0;
// 获取IP信息
$ip_type = get_post_meta($ip_id, '_ip_type', true);
$cooperation_modes = explode(',', get_post_meta($ip_id, '_cooperation_mode', true));
$target_industries = explode(',', get_post_meta($ip_id, '_target_industry', true));
$popularity_score = intval(get_post_meta($ip_id, '_popularity_score', true));
// 1. 行业匹配 (权重: 40%)
if (!empty($partner_data['industry']) && !empty($target_industries)) {
foreach ($target_industries as $industry) {
if (strpos($partner_data['industry'], trim($industry)) !== false) {
$score += 40;
break;
}
}
}
// 2. 合作模式匹配 (权重: 30%)
if (!empty($partner_data['cooperation_type']) && !empty($cooperation_modes)) {
foreach ($cooperation_modes as $mode) {
if ($this->is_cooperation_mode_match($mode, $partner_data['cooperation_type'])) {
$score += 30;
break;
}
}
}
// 3. 预算匹配 (权重: 20%)
if (!empty($partner_data['budget_range'])) {
$budget_score = $this->calculate_budget_match($ip_id, $partner_data['budget_range']);
$score += $budget_score * 20;
}
// 4. 热度加成 (权重: 10%)
$score += ($popularity_score / 100) * 10;
return $score;
}
/**
- 检查合作模式是否匹配
*/
private function is_cooperation_mode_match($ip_mode, $partner_mode) {
$mode_mapping = array(
'product' => array('product', 'licensing'),
'licensing' => array('licensing', 'co-branding'),
'co-branding' => array('co-branding', 'marketing'),
'marketing' => array('marketing', 'event'),
'event' => array('event', 'marketing')
);
return isset($mode_mapping[$ip_mode]) &&
in_array($partner_mode, $mode_mapping[$ip_mode]);
}
/**
- 计算预算匹配度
*/
private function calculate_budget_match($ip_id, $partner_budget) {
// 获取IP的预算要求
$ip_budget_level = get_post_meta($ip_id, '_budget_level', true);
$budget_matrix = array(
'under_50k' => array('under_50k' => 1.0, '50k_200k' => 0.6, '200k_500k' => 0.3, 'over_500k' => 0.1),
'50k_200k' => array('under_50k' => 0.4, '50k_200k' => 1.0, '200k_500k' => 0.7, 'over_500k' => 0.3),
'200k_500k' => array('under_50k' => 0.2, '50k_200k' => 0.5, '200k_500k' => 1.0, 'over_500k' => 0.6),
'over_500k' => array('under_50k' => 0.1, '50k_200k' => 0.3, '200k_500k' => 0.5, 'over_500k' => 1.0)
);
return isset($budget_matrix[$ip_budget_level][$partner_budget]) ?
$budget_matrix[$ip_budget_level][$partner_budget] : 0;
}
/**
- 获取匹配详情
*/
private function get_ip_match_details($ip_id, $partner_data) {
$details = array();
$ip_type = get_post_meta($ip_id, '_ip_type', true);
$cooperation_modes = get_post_meta($ip_id, '_cooperation_mode', true);
$target_industries = get_post_meta($ip_id, '_target_industry', true);
$details[] = sprintf(__('IP类型: %s', 'cultural-ip-cooperation'), $this->get_ip_type_label($ip_type));
if ($cooperation_modes) {
$modes = explode(',', $cooperation_modes);
$mode_labels = array_map(array($this, 'get_cooperation_mode_label'), $modes);
$details[] = sprintf(__('支持合作模式: %s', 'cultural-ip-cooperation'), implode(', ', $mode_labels));
}
if ($target_industries) {
$details[] = sprintf(__('目标行业: %s', 'cultural-ip-cooperation'), $target_industries);
}
return $details;
}
?>
## 六、管理后台界面开发
<?php
/**
- 添加管理菜单
*/
public function add_admin_menu() {
// 主菜单
add_menu_page(
__('文创IP合作', 'cultural-ip-cooperation'),
__('文创IP合作', 'cultural-ip-cooperation'),
'manage_options',
'cic-dashboard',
array($this, 'render_dashboard'),
'dashicons-groups',
30
);
// 子菜单
add_submenu_page(
'cic-dashboard',
__('数据统计', 'cultural-ip-cooperation'),
__('数据统计', 'cultural-ip-cooperation'),
'manage_options',
'cic-statistics',
array($this, 'render_statistics_page')
);
add_submenu_page(
'cic-dashboard',
__('匹配设置', 'cultural-ip-cooperation'),
__('匹配设置', 'cultural-ip-cooperation'),
'manage_options',
'cic-settings',
array($this, 'render_settings_page')
);
}
/**
- 渲染仪表盘
*/
public function render_dashboard() {
?>
<div class="wrap cic-dashboard">
<h1><?php _e('文创IP合作系统仪表盘', 'cultural-ip-cooperation'); ?></h1>
<div class="cic-stats-row">
<div class="cic-stat-box">
<h3><?php _e('活跃IP数量', 'cultural-ip-cooperation'); ?></h3>
<p class="stat-number"><?php echo $this->count_active_ips(); ?></p>
</div>
<div class="cic-stat-box">
<h3><?php _e('待处理申请', 'cultural-ip-cooperation'); ?></h3>
<p class="stat-number"><?php echo $this->count_pending_applications(); ?></p>
</div>
<div class="cic-stat-box">
<h3><?php _e('成功合作', 'cultural-ip-cooperation'); ?></h3>
<p class="stat-number"><?php echo $this->count_successful_cooperations(); ?></p>
</div>
<div class="cic-stat-box">
<h3><?php _e('匹配成功率', 'cultural-ip-cooperation'); ?></h3>
<p class="stat-number"><?php echo $this->calculate_match_rate(); ?>%</p>
</div>
</div>
<div class="cic-recent-activity">
<h2><?php _e('最近活动', 'cultural-ip-cooperation'); ?></h2>
<?php $this->render_recent_activity(); ?>
</div>
<div class="cic-quick-actions">
<h2><?php _e('快速操作', 'cultural-ip-cooperation'); ?></h2>
<div class="action-buttons">
<a href="<?php echo admin_url('post-new.php?post_type=ip_resource'); ?>" class="button button-primary">
<?php _e('添加新IP', 'cultural-ip-cooperation'); ?>
</a>
<a href="<?php echo admin_url('edit.php?post_type=cooperation_application'); ?>" class="button">
<?php _e('查看申请', 'cultural-ip-cooperation'); ?>
</a>
<a href="<?php echo admin_url('admin.php?page=cic-statistics'); ?>" class="button">
<?php _e('查看统计', 'cultural-ip-cooperation'); ?>
</a>
</div>
</div>
</div>
<style>
.cic-dashboard { padding: 20px; }
.cic-stats-row { display: flex; gap: 20px; margin: 30px 0; }
.cic-stat-box {
flex: 1;
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.stat-number {
font-size: 36px;
font-weight: bold;
color: #2271b1;
margin: 10px 0;
}
.cic-recent-activity, .cic-quick-actions {
background: white;
padding: 20px;
margin: 20px 0;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.action-buttons { display: flex; gap: 10px; margin-top: 15px; }
</style>
<?php
}
/**
- 渲染统计页面
*/
public function render_statistics_page() {
?>
<div class="wrap">
<h1><?php _e('数据统计与分析', 'cultural-ip-cooperation'); ?></h1>
<div class="cic-charts-container">
<div class="cic-chart-box">
<h3><?php _e('申请趋势', 'cultural-ip-cooperation'); ?></h3>
<canvas id="applicationsChart" width="400" height="200"></canvas>
