文章目录[隐藏]
网络传媒行业WordPress柔性内容供应链构建教程
引言:为什么需要柔性内容供应链?
在网络传媒行业,内容生产与发布的速度、灵活性和效率直接决定了竞争力。传统的内容发布流程往往存在环节割裂、响应迟缓、格式僵化等问题。柔性内容供应链通过技术整合和流程优化,实现内容的快速生产、智能管理和多渠道发布,帮助传媒机构适应瞬息万变的数字媒体环境。
WordPress作为全球最流行的内容管理系统,其强大的可扩展性和丰富的生态系统使其成为构建柔性内容供应链的理想平台。本教程将详细介绍如何利用WordPress构建一个高效、灵活的传媒内容供应链系统。
系统架构设计
核心组件规划
一个完整的柔性内容供应链系统应包含以下核心模块:
- 内容创作与协作平台
- 多媒体资源管理中心
- 自动化工作流引擎
- 多渠道发布接口
- 数据分析与优化模块
<?php
/**
* WordPress柔性内容供应链系统 - 核心架构类
* 负责初始化系统各模块并协调工作
*/
class FlexibleContentSupplyChain {
private $modules = array();
public function __construct() {
// 初始化核心模块
$this->init_modules();
}
/**
* 初始化所有系统模块
*/
private function init_modules() {
// 内容创作模块
$this->modules['creation'] = new ContentCreationModule();
// 工作流引擎
$this->modules['workflow'] = new WorkflowEngine();
// 发布管理模块
$this->modules['publishing'] = new MultiChannelPublisher();
// 数据分析模块
$this->modules['analytics'] = new ContentAnalytics();
// 资源管理模块
$this->modules['assets'] = new MediaAssetManager();
}
/**
* 启动内容供应链处理流程
* @param int $content_id 内容ID
* @return array 处理结果
*/
public function process_content($content_id) {
$results = array();
// 1. 内容创作与编辑
$results['creation'] = $this->modules['creation']->prepare_content($content_id);
// 2. 工作流审批
$results['workflow'] = $this->modules['workflow']->process_approval($content_id);
// 3. 多渠道发布
$results['publishing'] = $this->modules['publishing']->distribute_content($content_id);
// 4. 效果追踪
$results['analytics'] = $this->modules['analytics']->track_performance($content_id);
return $results;
}
}
// 实例化系统
$content_supply_chain = new FlexibleContentSupplyChain();
?>
内容创作模块实现
增强型编辑器集成
WordPress默认的编辑器已经非常强大,但对于传媒行业,我们需要更专业的创作工具。
<?php
/**
* 增强型内容创作模块
* 扩展WordPress编辑器功能,适应传媒行业需求
*/
class ContentCreationModule {
/**
* 初始化增强编辑器
*/
public function init_enhanced_editor() {
add_action('init', array($this, 'register_content_types'));
add_action('enqueue_block_editor_assets', array($this, 'enqueue_editor_assets'));
}
/**
* 注册自定义内容类型
*/
public function register_content_types() {
// 新闻报道内容类型
register_post_type('news_report',
array(
'labels' => array(
'name' => __('新闻报道'),
'singular_name' => __('新闻报道')
),
'public' => true,
'show_in_rest' => true, // 支持Gutenberg编辑器
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'taxonomies' => array('category', 'post_tag'),
'menu_icon' => 'dashicons-media-document',
)
);
// 专题报道内容类型
register_post_type('feature_story',
array(
'labels' => array(
'name' => __('专题报道'),
'singular_name' => __('专题报道')
),
'public' => true,
'show_in_rest' => true,
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'menu_icon' => 'dashicons-media-text',
)
);
}
/**
* 加载编辑器增强资源
*/
public function enqueue_editor_assets() {
wp_enqueue_script(
'enhanced-editor-script',
get_template_directory_uri() . '/js/enhanced-editor.js',
array('wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor'),
'1.0.0',
true
);
wp_enqueue_style(
'enhanced-editor-style',
get_template_directory_uri() . '/css/editor-styles.css',
array('wp-edit-blocks'),
'1.0.0'
);
}
/**
* 准备内容发布
* @param int $content_id 内容ID
* @return array 处理结果
*/
public function prepare_content($content_id) {
$result = array(
'status' => 'processing',
'message' => '',
'content_id' => $content_id
);
// 获取内容对象
$post = get_post($content_id);
if (!$post) {
$result['status'] = 'error';
$result['message'] = '内容不存在';
return $result;
}
// 自动提取关键词
$keywords = $this->extract_keywords($post->post_content);
update_post_meta($content_id, '_auto_keywords', $keywords);
// 生成内容摘要(如果未设置)
if (empty($post->post_excerpt)) {
$excerpt = $this->generate_excerpt($post->post_content, 150);
wp_update_post(array(
'ID' => $content_id,
'post_excerpt' => $excerpt
));
}
// 检查多媒体内容完整性
$media_check = $this->check_media_attachments($content_id);
$result['status'] = 'success';
$result['message'] = '内容准备完成';
$result['keywords'] = $keywords;
$result['media_check'] = $media_check;
return $result;
}
/**
* 从内容中提取关键词
* @param string $content 内容文本
* @return array 关键词数组
*/
private function extract_keywords($content) {
// 简化版关键词提取算法
$content = strip_tags($content);
$words = str_word_count($content, 1);
$word_freq = array_count_values($words);
// 过滤常见词
$common_words = array('的', '了', '在', '是', '我', '有', '和', '就', '不', '人', '都', '一', '一个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着', '没有', '看', '好', '自己', '这');
foreach ($common_words as $common) {
unset($word_freq[$common]);
}
arsort($word_freq);
return array_slice(array_keys($word_freq), 0, 5);
}
}
?>
工作流引擎开发
自动化审批流程
传媒行业的内容发布通常需要经过多层审核,工作流引擎可以自动化这一过程。
<?php
/**
* 智能工作流引擎
* 管理内容从创作到发布的全流程
*/
class WorkflowEngine {
private $workflow_stages = array(
'draft' => '草稿',
'editing' => '编辑中',
'review' => '审核中',
'approved' => '已批准',
'scheduled' => '已排期',
'published' => '已发布'
);
/**
* 处理内容审批流程
* @param int $content_id 内容ID
* @return array 审批结果
*/
public function process_approval($content_id) {
$current_stage = get_post_meta($content_id, '_workflow_stage', true);
if (empty($current_stage)) {
$current_stage = 'draft';
update_post_meta($content_id, '_workflow_stage', $current_stage);
}
$result = array(
'content_id' => $content_id,
'previous_stage' => $current_stage,
'actions_taken' => array()
);
// 根据当前阶段自动推进工作流
switch ($current_stage) {
case 'draft':
// 草稿完成后自动进入编辑阶段
if ($this->is_content_complete($content_id)) {
$new_stage = 'editing';
$this->notify_editor($content_id);
$result['actions_taken'][] = '通知编辑进行处理';
}
break;
case 'editing':
// 编辑完成后进入审核
if ($this->is_editing_complete($content_id)) {
$new_stage = 'review';
$this->notify_reviewers($content_id);
$result['actions_taken'][] = '通知审核人员进行审核';
}
break;
case 'review':
// 审核通过后进入批准状态
if ($this->is_review_approved($content_id)) {
$new_stage = 'approved';
$result['actions_taken'][] = '内容审核通过';
}
break;
case 'approved':
// 批准后自动排期发布
$new_stage = 'scheduled';
$publish_time = $this->schedule_publication($content_id);
$result['actions_taken'][] = '内容已排期,发布时间:' . $publish_time;
break;
default:
$new_stage = $current_stage;
}
// 更新工作流阶段
if ($new_stage != $current_stage) {
update_post_meta($content_id, '_workflow_stage', $new_stage);
$this->log_workflow_transition($content_id, $current_stage, $new_stage);
$result['new_stage'] = $new_stage;
$result['transition_time'] = current_time('mysql');
}
return $result;
}
/**
* 检查内容是否完整
*/
private function is_content_complete($content_id) {
$post = get_post($content_id);
// 检查必要元素
if (empty($post->post_title)) return false;
if (str_word_count(strip_tags($post->post_content)) < 300) return false;
if (!has_post_thumbnail($content_id)) return false;
return true;
}
/**
* 记录工作流状态转换
*/
private function log_workflow_transition($content_id, $from, $to) {
$log_entry = array(
'timestamp' => current_time('mysql'),
'from_stage' => $from,
'to_stage' => $to,
'user_id' => get_current_user_id()
);
$log = get_post_meta($content_id, '_workflow_log', true);
if (!is_array($log)) {
$log = array();
}
$log[] = $log_entry;
update_post_meta($content_id, '_workflow_log', $log);
}
}
?>
多渠道发布系统
一体化发布接口
传媒内容需要同时发布到网站、APP、社交媒体等多个平台。
<?php
/**
* 多渠道发布管理器
* 实现内容一键多平台发布
*/
class MultiChannelPublisher {
private $channels = array();
public function __construct() {
$this->register_channels();
}
/**
* 注册发布渠道
*/
private function register_channels() {
// WordPress网站(主站)
$this->channels['website'] = array(
'name' => '主网站',
'handler' => 'publish_to_website'
);
// 移动APP
$this->channels['app'] = array(
'name' => '移动应用',
'handler' => 'publish_to_app'
);
// 微信公众号
$this->channels['wechat'] = array(
'name' => '微信公众号',
'handler' => 'publish_to_wechat'
);
// 微博
$this->channels['weibo'] = array(
'name' => '新浪微博',
'handler' => 'publish_to_weibo'
);
// 第三方新闻平台
$this->channels['third_party'] = array(
'name' => '第三方平台',
'handler' => 'publish_to_third_party'
);
}
/**
* 分发内容到各渠道
* @param int $content_id 内容ID
* @return array 发布结果
*/
public function distribute_content($content_id) {
$results = array();
$post = get_post($content_id);
// 为不同渠道准备适配内容
$content_variants = $this->prepare_content_variants($post);
foreach ($this->channels as $channel_id => $channel) {
$handler_method = $channel['handler'];
if (method_exists($this, $handler_method)) {
$channel_result = $this->$handler_method($content_id, $content_variants[$channel_id]);
$results[$channel_id] = $channel_result;
}
}
// 记录发布日志
$this->log_distribution($content_id, $results);
return $results;
}
/**
* 为主网站发布内容
*/
private function publish_to_website($content_id, $content) {
// WordPress默认已发布,这里主要处理SEO优化
$this->optimize_seo($content_id);
return array(
'status' => 'success',
'message' => '网站发布完成',
'url' => get_permalink($content_id)
);
}
/**
* 为移动APP准备内容
*/
private function publish_to_app($content_id, $content) {
// 生成APP专用API数据
$app_data = array(
'id' => $content_id,
'title' => $content['title'],
'content' => $this->format_for_app($content['content']),
'excerpt' => $content['excerpt'],
'image' => $this->get_featured_image_url($content_id, 'app-large'),
'publish_time' => get_the_time('c', $content_id),
'categories' => wp_get_post_categories($content_id, array('fields' => 'names'))
);
// 保存到APP内容API
$this->update_app_content_api($content_id, $app_data);
// 发送推送通知(如果重要)
if (get_post_meta($content_id, '_breaking_news', true)) {
$this->send_push_notification($content_id, $content['title']);
}
return array(
'status' => 'success',
'message' => 'APP内容已更新',
'data_id' => $content_id
);
}
/**
* SEO优化处理
*/
private function optimize_seo($content_id) {
// 自动设置SEO标题
$title = get_the_title($content_id);
$seo_title = $title . ' - ' . get_bloginfo('name');
// 设置meta描述
$excerpt = get_the_excerpt($content_id);
if (empty($excerpt)) {
$content = get_post_field('post_content', $content_id);
$excerpt = wp_trim_words(strip_tags($content), 30);
}
// 更新SEO数据(假设使用Yoast SEO或类似插件)
update_post_meta($content_id, '_yoast_wpseo_title', $seo_title);
update_post_meta($content_id, '_yoast_wpseo_metadesc', $excerpt);
// 生成结构化数据
$this->generate_structured_data($content_id);
}
}
?>
数据分析与优化模块
内容表现追踪
通过数据分析优化内容策略,是柔性供应链的重要环节。
<?php
/**
* 内容数据分析模块
* 追踪内容表现并提供优化建议
*/
class ContentAnalytics {
/**
* 追踪内容表现
* @param int $content_id 内容ID
* @return array 分析结果
*/
public function track_performance($content_id) {
$analytics = array();
// 获取基础访问数据
$analytics['pageviews'] = $this->get_pageviews($content_id);
$analytics['engagement'] = $this->calculate_engagement($content_id);
$analytics['social_shares'] = $this->get_social_shares($content_id);
// 用户行为分析
$analytics['user_behavior'] = $this->analyze_user_behavior($content_id);
// 生成优化建议
$analytics['recommendations'] = $this->generate_recommendations($analytics);
// 保存分析结果
update_post_meta($content_id, '_content_analytics', $analytics);
update_post_meta($content_id, '_last_analyzed', current_time('mysql'));
return $analytics;
}
/**
* 获取页面浏览量
*/
private function get_pageviews($content_id) {
// 这里可以集成Google Analytics API或使用本地统计
<?php
/**
* 内容数据分析模块(续)
* 追踪内容表现并提供优化建议
*/
class ContentAnalytics {
// 接续上面的类定义
/**
* 获取页面浏览量
*/
private function get_pageviews($content_id) {
// 这里可以集成Google Analytics API或使用本地统计
// 简化版:使用post meta模拟统计数据
$pageviews = get_post_meta($content_id, '_pageviews', true);
if (!$pageviews) {
// 模拟生成初始数据
$pageviews = rand(500, 5000); // 实际应用中应从统计系统获取
update_post_meta($content_id, '_pageviews', $pageviews);
}
// 计算增长率
$previous_views = get_post_meta($content_id, '_previous_pageviews', true);
$growth = 0;
if ($previous_views && $previous_views > 0) {
$growth = (($pageviews - $previous_views) / $previous_views) * 100;
}
return array(
'total' => $pageviews,
'growth_rate' => round($growth, 2),
'today' => rand(50, 500) // 今日浏览量模拟
);
}
/**
* 计算用户参与度
*/
private function calculate_engagement($content_id) {
$post = get_post($content_id);
// 计算平均阅读时间(基于内容长度)
$word_count = str_word_count(strip_tags($post->post_content));
$avg_read_time = ceil($word_count / 200); // 假设每分钟阅读200字
// 评论互动
$comment_count = get_comments_number($content_id);
// 社交分享数(模拟数据)
$shares = get_post_meta($content_id, '_social_shares', true);
if (!$shares) {
$shares = array(
'wechat' => rand(10, 200),
'weibo' => rand(5, 100),
'other' => rand(2, 50)
);
update_post_meta($content_id, '_social_shares', $shares);
}
// 计算参与度分数(简化算法)
$engagement_score = 0;
$engagement_score += min($comment_count * 2, 20); // 评论贡献最多20分
$engagement_score += min(array_sum($shares) * 0.1, 30); // 分享贡献最多30分
$engagement_score += min(($avg_read_time > 2) ? 25 : 10, 25); // 阅读时间贡献
return array(
'score' => min($engagement_score, 100),
'avg_read_time' => $avg_read_time,
'comments' => $comment_count,
'shares' => $shares,
'word_count' => $word_count
);
}
/**
* 分析用户行为
*/
private function analyze_user_behavior($content_id) {
$behavior = array();
// 跳出率分析(模拟数据)
$behavior['bounce_rate'] = rand(30, 80);
// 用户滚动深度(模拟数据)
$scroll_depth = rand(40, 95);
$behavior['scroll_depth'] = $scroll_depth;
// 设备分布
$behavior['device_distribution'] = array(
'desktop' => rand(40, 60),
'mobile' => rand(30, 50),
'tablet' => rand(5, 15)
);
// 流量来源
$behavior['traffic_sources'] = array(
'direct' => rand(20, 40),
'search' => rand(25, 45),
'social' => rand(15, 35),
'referral' => rand(5, 20)
);
// 热门时段
$peak_hours = array();
for ($i = 0; $i < 24; $i++) {
$peak_hours[$i] = rand(0, 100);
}
// 模拟早晚高峰
$peak_hours[9] = rand(80, 100); // 上午高峰
$peak_hours[14] = rand(70, 95); // 下午高峰
$peak_hours[20] = rand(60, 90); // 晚间高峰
$behavior['peak_hours'] = $peak_hours;
return $behavior;
}
/**
* 生成优化建议
*/
private function generate_recommendations($analytics) {
$recommendations = array();
// 基于页面浏览量的建议
if ($analytics['pageviews']['total'] < 1000) {
$recommendations[] = array(
'type' => 'visibility',
'priority' => 'high',
'message' => '内容曝光不足,建议通过社交媒体和邮件列表进行推广',
'action' => 'increase_promotion'
);
}
// 基于参与度的建议
if ($analytics['engagement']['score'] < 50) {
$recommendations[] = array(
'type' => 'engagement',
'priority' => 'medium',
'message' => '用户参与度较低,建议增加互动元素(投票、问答等)',
'action' => 'add_interactive_elements'
);
}
// 基于阅读时间的建议
if ($analytics['engagement']['avg_read_time'] < 2) {
$recommendations[] = array(
'type' => 'content_quality',
'priority' => 'high',
'message' => '平均阅读时间较短,建议优化内容结构和可读性',
'action' => 'improve_readability'
);
}
// 基于设备分布的建议
if ($analytics['user_behavior']['device_distribution']['mobile'] > 50) {
$recommendations[] = array(
'type' => 'technical',
'priority' => 'medium',
'message' => '移动端访问占比较高,请确保内容在移动设备上的显示效果',
'action' => 'check_mobile_responsive'
);
}
// 基于流量来源的建议
if ($analytics['user_behavior']['traffic_sources']['search'] < 30) {
$recommendations[] = array(
'type' => 'seo',
'priority' => 'high',
'message' => '搜索流量偏低,建议优化SEO关键词和元描述',
'action' => 'optimize_seo'
);
}
return $recommendations;
}
/**
* 生成内容表现报告
*/
public function generate_performance_report($content_id, $period = '7days') {
$report = array(
'content_id' => $content_id,
'period' => $period,
'generated_at' => current_time('mysql'),
'summary' => array(),
'detailed_metrics' => array(),
'comparisons' => array()
);
// 获取当前内容数据
$current_analytics = $this->track_performance($content_id);
// 获取同类内容对比数据
$comparison_data = $this->get_category_comparison($content_id, $period);
$report['summary'] = array(
'pageviews' => $current_analytics['pageviews']['total'],
'engagement_score' => $current_analytics['engagement']['score'],
'avg_position' => $comparison_data['position'],
'recommendations_count' => count($current_analytics['recommendations'])
);
$report['detailed_metrics'] = $current_analytics;
$report['comparisons'] = $comparison_data;
// 保存报告
update_post_meta($content_id, '_performance_report_' . $period, $report);
return $report;
}
/**
* 获取同类内容对比数据
*/
private function get_category_comparison($content_id, $period) {
$categories = wp_get_post_categories($content_id);
$comparison = array(
'category_avg_pageviews' => 0,
'category_avg_engagement' => 0,
'position' => 'average', // above_average, average, below_average
'top_performers' => array()
);
if (!empty($categories)) {
// 获取同类内容数据(简化版)
$args = array(
'category__in' => $categories,
'posts_per_page' => 10,
'fields' => 'ids',
'date_query' => $this->get_date_query_for_period($period)
);
$similar_posts = get_posts($args);
if (count($similar_posts) > 0) {
$total_pageviews = 0;
$total_engagement = 0;
$count = 0;
foreach ($similar_posts as $post_id) {
if ($post_id == $content_id) continue;
$pageviews = get_post_meta($post_id, '_pageviews', true);
$engagement = get_post_meta($post_id, '_engagement_score', true);
if ($pageviews) {
$total_pageviews += $pageviews;
$total_engagement += $engagement ?: 50;
$count++;
// 记录表现最好的内容
if ($pageviews > 2000) {
$comparison['top_performers'][] = array(
'id' => $post_id,
'title' => get_the_title($post_id),
'pageviews' => $pageviews
);
}
}
}
if ($count > 0) {
$comparison['category_avg_pageviews'] = round($total_pageviews / $count);
$comparison['category_avg_engagement'] = round($total_engagement / $count);
// 确定位置
$current_pageviews = get_post_meta($content_id, '_pageviews', true);
if ($current_pageviews > $comparison['category_avg_pageviews'] * 1.2) {
$comparison['position'] = 'above_average';
} elseif ($current_pageviews < $comparison['category_avg_pageviews'] * 0.8) {
$comparison['position'] = 'below_average';
}
}
}
}
return $comparison;
}
/**
* 根据周期获取日期查询条件
*/
private function get_date_query_for_period($period) {
$date_query = array();
switch ($period) {
case '1day':
$date_query = array(
'after' => '1 day ago'
);
break;
case '7days':
$date_query = array(
'after' => '7 days ago'
);
break;
case '30days':
$date_query = array(
'after' => '30 days ago'
);
break;
default:
$date_query = array(
'after' => '7 days ago'
);
}
return $date_query;
}
}
?>
系统集成与部署
WordPress插件封装
将上述模块封装为完整的WordPress插件。
<?php
/**
* Plugin Name: 柔性内容供应链系统
* Plugin URI: https://yourmedia.com/
* Description: 为网络传媒行业打造的柔性内容供应链管理系统
* Version: 1.0.0
* Author: 传媒科技团队
* License: GPL v2 or later
*/
// 防止直接访问
if (!defined('ABSPATH')) {
exit;
}
// 定义插件常量
define('FCSC_VERSION', '1.0.0');
define('FCSC_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('FCSC_PLUGIN_URL', plugin_dir_url(__FILE__));
// 自动加载类文件
spl_autoload_register(function ($class_name) {
$class_file = FCSC_PLUGIN_DIR . 'includes/classes/' . $class_name . '.php';
if (file_exists($class_file)) {
require_once $class_file;
}
});
// 主插件类
class FlexibleContentSupplyChainPlugin {
private static $instance = null;
private $supply_chain;
public static function get_instance() {
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
private function __construct() {
$this->init_hooks();
$this->init_system();
}
/**
* 初始化WordPress钩子
*/
private function init_hooks() {
// 激活/停用钩子
register_activation_hook(__FILE__, array($this, 'activate'));
register_deactivation_hook(__FILE__, array($this, 'deactivate'));
// 初始化钩子
add_action('init', array($this, 'init'));
add_action('admin_menu', array($this, 'add_admin_menu'));
add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts'));
// 内容发布钩子
add_action('publish_post', array($this, 'handle_content_publish'), 10, 2);
add_action('wp_ajax_process_content_supply_chain', array($this, 'ajax_process_supply_chain'));
// REST API端点
add_action('rest_api_init', array($this, 'register_rest_endpoints'));
}
/**
* 初始化系统
*/
private function init_system() {
// 初始化核心系统
$this->supply_chain = new FlexibleContentSupplyChain();
// 初始化各模块
$this->modules = array(
'creation' => new ContentCreationModule(),
'workflow' => new WorkflowEngine(),
'publishing' => new MultiChannelPublisher(),
'analytics' => new ContentAnalytics()
);
// 启动增强编辑器
$this->modules['creation']->init_enhanced_editor();
}
/**
* 插件激活时执行
*/
public function activate() {
// 创建必要的数据库表
$this->create_database_tables();
// 设置默认选项
$default_options = array(
'workflow_enabled' => true,
'auto_publish' => false,
'analytics_tracking' => true,
'channels' => array('website', 'app'),
'notification_emails' => get_option('admin_email')
);
add_option('fcsc_settings', $default_options);
// 添加用户角色和能力
$this->add_user_capabilities();
// 刷新重写规则
flush_rewrite_rules();
}
/**
* 创建数据库表
*/
private function create_database_tables() {
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
// 内容工作流日志表
$table_name = $wpdb->prefix . 'fcsc_workflow_logs';
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
id bigint(20) NOT NULL AUTO_INCREMENT,
content_id bigint(20) NOT NULL,
user_id bigint(20) NOT NULL,
action varchar(100) NOT NULL,
from_stage varchar(50) NOT NULL,
to_stage varchar(50) NOT NULL,
notes text,
created_at datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY content_id (content_id),
KEY user_id (user_id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
// 多渠道发布记录表
$table_name = $wpdb->prefix . 'fcsc_publish_logs';
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
id bigint(20) NOT NULL AUTO_INCREMENT,
content_id bigint(20) NOT NULL,
channel varchar(50) NOT NULL,
status varchar(20) NOT NULL,
message text,
publish_time datetime,
external_id varchar(255),
created_at datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY content_id (content_id),
KEY channel (channel)
) $charset_collate;";
dbDelta($sql);
}
/**
* 添加用户能力
*/
private function add_user_capabilities() {
// 为编辑角色添加工作流管理能力
$editor_role = get_role('editor');
if ($editor_role) {
$editor_role->add_cap('manage_content_workflow');
$editor_role->add_cap('review_content');
$editor_role->add_cap('publish_to_external_channels');
}
// 为作者角色添加能力
$author_role = get_role('author');
if ($author_role) {
$author_role->add_cap('submit_to_workflow');
$author_role->add_cap('view_content_analytics');
}
}
/**
* 添加管理菜单
*/
public function add_admin_menu() {
// 主菜单
add_menu_page(
'内容供应链',
'内容供应链',
'manage_options',
'fcsc-dashboard',
array($this, 'render_dashboard'),
'dashicons-networking',
30
);
// 子菜单
add_submenu_page(
'fcsc-dashboard',
'工作流管理',
'工作流',
'manage_content_workflow',
'fcsc-workflow',
array($this, 'render_workflow_page')
);
add_submenu_page(
'fcsc-dashboard',
'发布渠道',
'发布渠道',
'manage_options',
'fcsc-channels',
array($this, 'render_channels_page')
);
add_submenu_page(
