首页 / 教程文章 / 网络传媒柔性内容多渠道效果分析WordPress插件教程

网络传媒柔性内容多渠道效果分析WordPress插件教程

网络传媒柔性内容多渠道效果分析WordPress插件教程

引言:柔性内容多渠道分析的重要性

在当今数字化媒体环境中,网络传媒机构面临着内容分发渠道多样化、受众碎片化的挑战。柔性内容——即能够适应不同平台格式和用户偏好的可调整内容——已成为提高传播效果的关键策略。然而,要真正优化内容策略,我们需要数据驱动的洞察力来了解不同渠道的表现差异。

本教程将指导您创建一个功能完整的WordPress插件,用于分析柔性内容在多个渠道(如网站、社交媒体、邮件营销等)的表现效果,并通过可视化仪表板展示关键指标。

插件功能规划

我们的插件将具备以下核心功能:

  1. 多渠道数据采集与整合
  2. 内容效果指标计算与分析
  3. 可视化数据仪表板
  4. 自定义报告生成
  5. 渠道效果对比分析

环境准备与插件基础结构

首先,我们需要创建插件的基本文件结构。在WordPress的wp-content/plugins/目录下创建新文件夹flexible-content-analytics,并创建以下文件:

<?php
/**
 * Plugin Name: 柔性内容多渠道效果分析
 * Plugin URI: https://yourwebsite.com/
 * Description: 分析柔性内容在多个渠道的表现效果
 * Version: 1.0.0
 * Author: 您的名称
 * License: GPL v2 or later
 * Text Domain: flexible-content-analytics
 */

// 防止直接访问
if (!defined('ABSPATH')) {
    exit;
}

// 定义插件常量
define('FCA_PLUGIN_PATH', plugin_dir_path(__FILE__));
define('FCA_PLUGIN_URL', plugin_dir_url(__FILE__));
define('FCA_VERSION', '1.0.0');

// 初始化插件
require_once FCA_PLUGIN_PATH . 'includes/class-core.php';
require_once FCA_PLUGIN_PATH . 'includes/class-database.php';
require_once FCA_PLUGIN_PATH . 'includes/class-analytics.php';
require_once FCA_PLUGIN_PATH . 'includes/class-dashboard.php';

// 激活和停用钩子
register_activation_hook(__FILE__, array('FCA_Database', 'create_tables'));
register_deactivation_hook(__FILE__, array('FCA_Database', 'cleanup'));

// 初始化主类
function fca_init() {
    $plugin = FCA_Core::get_instance();
    return $plugin;
}
add_action('plugins_loaded', 'fca_init');

数据库设计与实现

接下来,我们创建数据库表来存储多渠道分析数据。在includes/class-database.php中:

<?php
/**
 * 数据库处理类
 * 负责创建和管理插件所需的数据库表
 */
class FCA_Database {
    
    /**
     * 创建插件所需的数据库表
     */
    public static function create_tables() {
        global $wpdb;
        
        $charset_collate = $wpdb->get_charset_collate();
        $table_name = $wpdb->prefix . 'fca_content_performance';
        
        $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,
            publish_date datetime NOT NULL,
            views int(11) DEFAULT 0,
            engagements int(11) DEFAULT 0,
            conversions int(11) DEFAULT 0,
            avg_time_spent float DEFAULT 0,
            bounce_rate float DEFAULT 0,
            social_shares int(11) DEFAULT 0,
            collected_date date NOT NULL,
            PRIMARY KEY (id),
            KEY content_id (content_id),
            KEY channel (channel),
            KEY collected_date (collected_date)
        ) $charset_collate;";
        
        require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
        dbDelta($sql);
        
        // 创建渠道定义表
        $channels_table = $wpdb->prefix . 'fca_channels';
        $sql2 = "CREATE TABLE IF NOT EXISTS $channels_table (
            id bigint(20) NOT NULL AUTO_INCREMENT,
            channel_name varchar(100) NOT NULL,
            channel_type varchar(50) NOT NULL,
            is_active tinyint(1) DEFAULT 1,
            api_config text,
            PRIMARY KEY (id)
        ) $charset_collate;";
        
        dbDelta($sql2);
        
        // 插入默认渠道数据
        self::insert_default_channels();
    }
    
    /**
     * 插入默认渠道数据
     */
    private static function insert_default_channels() {
        global $wpdb;
        
        $channels = array(
            array('website', '自有平台', 1, ''),
            array('facebook', '社交媒体', 1, ''),
            array('twitter', '社交媒体', 1, ''),
            array('linkedin', '社交媒体', 1, ''),
            array('email', '邮件营销', 1, ''),
            array('wechat', '社交媒体', 1, ''),
            array('weibo', '社交媒体', 1, '')
        );
        
        $table_name = $wpdb->prefix . 'fca_channels';
        
        foreach ($channels as $channel) {
            $wpdb->replace(
                $table_name,
                array(
                    'channel_name' => $channel[0],
                    'channel_type' => $channel[1],
                    'is_active' => $channel[2],
                    'api_config' => $channel[3]
                )
            );
        }
    }
    
    /**
     * 清理插件数据(停用时)
     */
    public static function cleanup() {
        // 可根据需要决定是否删除数据表
        // 实际应用中通常保留数据
    }
}

数据分析核心功能

现在创建数据分析类,在includes/class-analytics.php中:

<?php
/**
 * 数据分析类
 * 负责计算和分析多渠道内容效果
 */
class FCA_Analytics {
    
    private $db;
    
    public function __construct() {
        global $wpdb;
        $this->db = $wpdb;
    }
    
    /**
     * 计算内容在指定渠道的效果得分
     * @param int $content_id 内容ID
     * @param string $channel 渠道名称
     * @param string $period 时间周期(7d, 30d, 90d)
     * @return array 效果指标
     */
    public function calculate_channel_performance($content_id, $channel, $period = '30d') {
        $table_name = $this->db->prefix . 'fca_content_performance';
        
        // 根据周期计算日期范围
        $date_condition = $this->get_date_condition($period);
        
        $query = $this->db->prepare(
            "SELECT 
                SUM(views) as total_views,
                SUM(engagements) as total_engagements,
                SUM(conversions) as total_conversions,
                AVG(avg_time_spent) as avg_time,
                AVG(bounce_rate) as avg_bounce_rate,
                SUM(social_shares) as total_shares
             FROM $table_name 
             WHERE content_id = %d 
             AND channel = %s 
             AND $date_condition",
            $content_id,
            $channel
        );
        
        $results = $this->db->get_row($query, ARRAY_A);
        
        if (!$results) {
            return array(
                'total_views' => 0,
                'total_engagements' => 0,
                'total_conversions' => 0,
                'avg_time' => 0,
                'avg_bounce_rate' => 0,
                'total_shares' => 0,
                'performance_score' => 0
            );
        }
        
        // 计算综合效果得分(自定义算法)
        $performance_score = $this->calculate_performance_score($results);
        $results['performance_score'] = $performance_score;
        
        return $results;
    }
    
    /**
     * 计算综合效果得分
     * @param array $metrics 各项指标
     * @return float 综合得分(0-100)
     */
    private function calculate_performance_score($metrics) {
        // 权重配置(可根据实际需求调整)
        $weights = array(
            'views' => 0.2,
            'engagements' => 0.25,
            'conversions' => 0.3,
            'time_spent' => 0.15,
            'shares' => 0.1
        );
        
        // 标准化各项指标(这里使用简单标准化,实际应用可能需要更复杂的归一化)
        $max_values = $this->get_max_metrics_values();
        
        $normalized = array();
        $normalized['views'] = min($metrics['total_views'] / max($max_values['views'], 1) * 100, 100);
        $normalized['engagements'] = min($metrics['total_engagements'] / max($max_values['engagements'], 1) * 100, 100);
        $normalized['conversions'] = min($metrics['total_conversions'] / max($max_values['conversions'], 1) * 100, 100);
        $normalized['time_spent'] = min($metrics['avg_time'] / max($max_values['time_spent'], 1) * 100, 100);
        $normalized['shares'] = min($metrics['total_shares'] / max($max_values['shares'], 1) * 100, 100);
        
        // 计算加权得分
        $score = 0;
        foreach ($weights as $metric => $weight) {
            $score += $normalized[$metric] * $weight;
        }
        
        // 考虑跳出率的负面影响
        $bounce_penalty = $metrics['avg_bounce_rate'] * 0.5; // 跳出率惩罚系数
        $score = max($score - $bounce_penalty, 0);
        
        return round($score, 2);
    }
    
    /**
     * 获取所有渠道对比分析
     * @param int $content_id 内容ID
     * @param string $period 时间周期
     * @return array 各渠道表现对比
     */
    public function compare_channels_performance($content_id, $period = '30d') {
        $channels_table = $this->db->prefix . 'fca_channels';
        $performance_table = $this->db->prefix . 'fca_content_performance';
        
        $active_channels = $this->db->get_results(
            "SELECT channel_name FROM $channels_table WHERE is_active = 1",
            ARRAY_A
        );
        
        $comparison = array();
        foreach ($active_channels as $channel) {
            $channel_name = $channel['channel_name'];
            $performance = $this->calculate_channel_performance($content_id, $channel_name, $period);
            
            $comparison[$channel_name] = array(
                'performance_score' => $performance['performance_score'],
                'views' => $performance['total_views'],
                'engagements' => $performance['total_engagements'],
                'conversions' => $performance['total_conversions'],
                'shares' => $performance['total_shares']
            );
        }
        
        // 按效果得分排序
        uasort($comparison, function($a, $b) {
            return $b['performance_score'] <=> $a['performance_score'];
        });
        
        return $comparison;
    }
    
    /**
     * 根据周期获取SQL日期条件
     */
    private function get_date_condition($period) {
        $days = 30; // 默认30天
        
        if (strpos($period, 'd') !== false) {
            $days = intval($period);
        } elseif (strpos($period, 'm') !== false) {
            $days = intval($period) * 30;
        }
        
        $date = date('Y-m-d', strtotime("-$days days"));
        return "collected_date >= '$date'";
    }
    
    /**
     * 获取最大指标值用于标准化
     */
    private function get_max_metrics_values() {
        // 这里简化处理,实际应用中应从历史数据计算
        return array(
            'views' => 10000,
            'engagements' => 5000,
            'conversions' => 1000,
            'time_spent' => 600, // 秒
            'shares' => 500
        );
    }
}

可视化仪表板实现

创建仪表板类,在includes/class-dashboard.php中:

<?php
/**
 * 仪表板显示类
 * 负责生成分析结果的可视化界面
 */
class FCA_Dashboard {
    
    public function __construct() {
        add_action('admin_menu', array($this, 'add_admin_menu'));
        add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts'));
    }
    
    /**
     * 添加管理菜单
     */
    public function add_admin_menu() {
        add_menu_page(
            '柔性内容分析',
            '内容分析',
            'manage_options',
            'flexible-content-analytics',
            array($this, 'render_dashboard'),
            'dashicons-chart-line',
            30
        );
        
        add_submenu_page(
            'flexible-content-analytics',
            '渠道对比',
            '渠道对比',
            'manage_options',
            'fca-channel-comparison',
            array($this, 'render_channel_comparison')
        );
        
        add_submenu_page(
            'flexible-content-analytics',
            '内容报告',
            '内容报告',
            'manage_options',
            'fca-content-reports',
            array($this, 'render_content_reports')
        );
    }
    
    /**
     * 渲染主仪表板
     */
    public function render_dashboard() {
        $analytics = new FCA_Analytics();
        
        // 获取最近发布的内容
        $recent_posts = get_posts(array(
            'numberposts' => 5,
            'post_type' => 'post',
            'post_status' => 'publish'
        ));
        
        echo '<div class="wrap">';
        echo '<h1>柔性内容多渠道效果分析</h1>';
        
        echo '<div class="fca-dashboard">';
        
        // 总体概览
        echo '<div class="fca-overview">';
        echo '<h2>内容表现概览</h2>';
        
        foreach ($recent_posts as $post) {
            $comparison = $analytics->compare_channels_performance($post->ID, '7d');
            
            echo '<div class="fca-content-card">';
            echo '<h3>' . esc_html($post->post_title) . '</h3>';
            
            if (!empty($comparison)) {
                echo '<div class="fca-channels-summary">';
                $top_channel = array_key_first($comparison);
                $top_score = $comparison[$top_channel]['performance_score'];
                
                echo '<div class="fca-top-channel">';
                echo '<strong>最佳渠道:</strong> ' . esc_html($top_channel) . 
                     ' (得分: ' . esc_html($top_score) . ')';
                echo '</div>';
                
                // 简单条形图表示
                echo '<div class="fca-channel-bars">';
                foreach ($comparison as $channel => $data) {
                    $width = min($data['performance_score'] * 2, 100);
                    echo '<div class="fca-channel-bar">';
                    echo '<span class="fca-channel-name">' . esc_html($channel) . '</span>';
                    echo '<div class="fca-bar-container">';
                    echo '<div class="fca-bar" style="width: ' . esc_attr($width) . '%;"></div>';
                    echo '<span class="fca-bar-score">' . esc_html($data['performance_score']) . '</span>';
                    echo '</div>';
                    echo '</div>';
                }
                echo '</div>';
                
                echo '</div>';
            } else {
                echo '<p>暂无数据</p>';
            }
            
            echo '</div>';
        }
        
        echo '</div>';
        echo '</div>';
        echo '</div>';
    }
    
    /**
     * 渲染渠道对比页面
     */
    public function render_channel_comparison() {
        if (!isset($_GET['content_id']) || empty($_GET['content_id'])) {
            echo '<div class="wrap">';
            echo '<h1>选择要分析的内容</h1>';
            
            // 显示内容选择列表
            $posts = get_posts(array(
                'numberposts' => 20,
                'post_type' => 'post',
                'post_status' => 'publish'
            ));
            
            echo '<ul>';
            foreach ($posts as $post) {
                $url = admin_url('admin.php?page=fca-channel-comparison&content_id=' . $post->ID);
                echo '<li><a href="' . esc_url($url) . '">' . esc_html($post->post_title) . '</a></li>';
            }
            echo '</ul>';
            
            echo '</div>';
            return;
        }
        
        $content_id = intval($_GET['content_id']);
        $post = get_post($content_id);
        
        if (!$post) {
            echo '<div class="wrap"><p>内容不存在</p></div>';
            return;
        }
        
        $analytics = new FCA_Analytics();
        $comparison = $analytics->compare_channels_performance($content_id, '30d');
        
        echo '<div class="wrap">';
        echo '<h1>渠道效果对比: ' . esc_html($post->post_title) . '</h1>';
        
        echo '<div class="fca-comparison-table">';
        echo '<table class="wp-list-table widefat fixed striped">';
        echo '<thead>';
        echo '<tr>';
        echo '<th>渠道</th>';
        echo '<th>效果得分</th>';
        echo '<th>浏览量</th>';
        echo '<th>互动数</th>';
        echo '<th>转化数</th>';
        echo '<th>分享数</th>';
        echo '</tr>';
        echo '</thead>';
        echo '<tbody>';
        
        foreach ($comparison as $channel => $data) {
            echo '<tr>';
            echo '<td>' . esc_html($channel) . '</td>';

echo '<td>' . esc_html($data['performance_score']) . '</td>';

        echo '<td>' . esc_html($data['views']) . '</td>';
        echo '<td>' . esc_html($data['engagements']) . '</td>';
        echo '<td>' . esc_html($data['conversions']) . '</td>';
        echo '<td>' . esc_html($data['shares']) . '</td>';
        echo '</tr>';
    }
    
    echo '</tbody>';
    echo '</table>';
    echo '</div>';
    
    // 添加时间周期选择器
    echo '<div class="fca-period-selector">';
    echo '<h3>选择分析周期</h3>';
    echo '<select id="fca-period-select">';
    echo '<option value="7d">最近7天</option>';
    echo '<option value="30d" selected>最近30天</option>';
    echo '<option value="90d">最近90天</option>';
    echo '</select>';
    echo '<button id="fca-update-chart" class="button button-primary">更新图表</button>';
    echo '</div>';
    
    // 图表容器
    echo '<div class="fca-chart-container">';
    echo '<canvas id="fca-channel-comparison-chart" width="800" height="400"></canvas>';
    echo '</div>';
    
    echo '</div>';
    
    // 内联JavaScript用于图表渲染
    $this->render_chart_js($comparison);
}

/**
 * 渲染图表JavaScript
 */
private function render_chart_js($comparison_data) {
    $labels = array_keys($comparison_data);
    $scores = array_column($comparison_data, 'performance_score');
    $views = array_column($comparison_data, 'views');
    
    ?>
    <script>
    jQuery(document).ready(function($) {
        var ctx = document.getElementById('fca-channel-comparison-chart').getContext('2d');
        
        var chartData = {
            labels: <?php echo json_encode($labels); ?>,
            datasets: [{
                label: '效果得分',
                data: <?php echo json_encode($scores); ?>,
                backgroundColor: 'rgba(54, 162, 235, 0.5)',
                borderColor: 'rgba(54, 162, 235, 1)',
                borderWidth: 1,
                yAxisID: 'y'
            }, {
                label: '浏览量',
                data: <?php echo json_encode($views); ?>,
                backgroundColor: 'rgba(255, 99, 132, 0.5)',
                borderColor: 'rgba(255, 99, 132, 1)',
                borderWidth: 1,
                yAxisID: 'y1'
            }]
        };
        
        var chart = new Chart(ctx, {
            type: 'bar',
            data: chartData,
            options: {
                responsive: true,
                scales: {
                    y: {
                        type: 'linear',
                        display: true,
                        position: 'left',
                        title: {
                            display: true,
                            text: '效果得分'
                        }
                    },
                    y1: {
                        type: 'linear',
                        display: true,
                        position: 'right',
                        title: {
                            display: true,
                            text: '浏览量'
                        },
                        grid: {
                            drawOnChartArea: false
                        }
                    }
                }
            }
        });
        
        // 更新图表按钮事件
        $('#fca-update-chart').on('click', function() {
            var period = $('#fca-period-select').val();
            var contentId = <?php echo intval($_GET['content_id']); ?>;
            
            $.ajax({
                url: ajaxurl,
                type: 'POST',
                data: {
                    action: 'fca_update_chart',
                    content_id: contentId,
                    period: period,
                    nonce: '<?php echo wp_create_nonce('fca_ajax_nonce'); ?>'
                },
                success: function(response) {
                    if (response.success) {
                        chart.data.labels = response.data.labels;
                        chart.data.datasets[0].data = response.data.scores;
                        chart.data.datasets[1].data = response.data.views;
                        chart.update();
                    }
                }
            });
        });
    });
    </script>
    <?php
}

/**
 * 渲染内容报告页面
 */
public function render_content_reports() {
    echo '<div class="wrap">';
    echo '<h1>内容效果报告</h1>';
    
    // 报告生成表单
    echo '<div class="fca-report-form">';
    echo '<h2>生成自定义报告</h2>';
    echo '<form method="post" action="' . admin_url('admin-post.php') . '">';
    echo '<input type="hidden" name="action" value="fca_generate_report">';
    
    // 内容选择
    echo '<div class="fca-form-group">';
    echo '<label for="fca-content-select">选择内容:</label>';
    echo '<select id="fca-content-select" name="content_ids[]" multiple style="width: 300px; height: 150px;">';
    
    $posts = get_posts(array(
        'numberposts' => -1,
        'post_type' => 'post',
        'post_status' => 'publish'
    ));
    
    foreach ($posts as $post) {
        echo '<option value="' . esc_attr($post->ID) . '">' . esc_html($post->post_title) . '</option>';
    }
    
    echo '</select>';
    echo '</div>';
    
    // 渠道选择
    echo '<div class="fca-form-group">';
    echo '<label>选择渠道:</label><br>';
    
    $channels = array('website', 'facebook', 'twitter', 'linkedin', 'email', 'wechat', 'weibo');
    foreach ($channels as $channel) {
        echo '<label style="margin-right: 15px;">';
        echo '<input type="checkbox" name="channels[]" value="' . esc_attr($channel) . '" checked> ';
        echo esc_html($channel);
        echo '</label>';
    }
    
    echo '</div>';
    
    // 时间范围
    echo '<div class="fca-form-group">';
    echo '<label for="fca-date-from">时间范围:</label>';
    echo '<input type="date" id="fca-date-from" name="date_from" value="' . date('Y-m-d', strtotime('-30 days')) . '">';
    echo ' 至 ';
    echo '<input type="date" id="fca-date-to" name="date_to" value="' . date('Y-m-d') . '">';
    echo '</div>';
    
    // 报告格式
    echo '<div class="fca-form-group">';
    echo '<label for="fca-report-format">报告格式:</label>';
    echo '<select id="fca-report-format" name="report_format">';
    echo '<option value="html">HTML网页</option>';
    echo '<option value="csv">CSV文件</option>';
    echo '<option value="pdf">PDF文档</option>';
    echo '</select>';
    echo '</div>';
    
    echo '<p>';
    echo '<input type="submit" name="generate_report" class="button button-primary" value="生成报告">';
    echo '</p>';
    
    echo '</form>';
    echo '</div>';
    
    // 历史报告列表
    $this->render_report_history();
    
    echo '</div>';
}

/**
 * 渲染历史报告列表
 */
private function render_report_history() {
    // 这里可以添加从数据库获取历史报告的逻辑
    echo '<div class="fca-report-history">';
    echo '<h2>历史报告</h2>';
    echo '<p>最近生成的报告将显示在这里。</p>';
    echo '</div>';
}

/**
 * 加载管理端脚本和样式
 */
public function enqueue_admin_scripts($hook) {
    if (strpos($hook, 'flexible-content-analytics') === false) {
        return;
    }
    
    // 加载Chart.js库
    wp_enqueue_script(
        'chart-js',
        'https://cdn.jsdelivr.net/npm/chart.js',
        array(),
        '3.7.0',
        true
    );
    
    // 加载自定义样式
    wp_enqueue_style(
        'fca-admin-style',
        FCA_PLUGIN_URL . 'assets/css/admin-style.css',
        array(),
        FCA_VERSION
    );
    
    // 加载自定义脚本
    wp_enqueue_script(
        'fca-admin-script',
        FCA_PLUGIN_URL . 'assets/js/admin-script.js',
        array('jquery', 'chart-js'),
        FCA_VERSION,
        true
    );
    
    // 本地化脚本
    wp_localize_script('fca-admin-script', 'fca_ajax', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('fca_ajax_nonce')
    ));
}

}


## 数据采集与API集成

创建数据采集模块,在`includes/class-data-collector.php`中:

<?php
/**

  • 数据采集类
  • 负责从不同渠道收集内容表现数据
    */

class FCA_Data_Collector {


private $analytics;

public function __construct() {
    $this->analytics = new FCA_Analytics();
    add_action('fca_daily_data_collection', array($this, 'collect_daily_data'));
}

/**
 * 每日数据收集任务
 */
public function collect_daily_data() {
    $this->collect_website_data();
    $this->collect_social_media_data();
    $this->collect_email_data();
}

/**
 * 收集网站数据(使用Google Analytics API示例)
 */
private function collect_website_data() {
    global $wpdb;
    
    // 这里使用模拟数据,实际应调用Google Analytics API
    $posts = get_posts(array(
        'numberposts' => 50,
        'post_type' => 'post',
        'post_status' => 'publish',
        'date_query' => array(
            'after' => date('Y-m-d', strtotime('-7 days'))
        )
    ));
    
    foreach ($posts as $post) {
        // 模拟数据 - 实际应用中应从API获取真实数据
        $views = rand(50, 5000);
        $engagements = rand(10, 1000);
        $conversions = rand(1, 100);
        $avg_time = rand(30, 600);
        $bounce_rate = rand(20, 80);
        
        $this->save_performance_data(
            $post->ID,
            'website',
            $views,
            $engagements,
            $conversions,
            $avg_time,
            $bounce_rate,
            0 // 网站数据不包含分享数
        );
    }
}

/**
 * 收集社交媒体数据
 */
private function collect_social_media_data() {
    $channels = array('facebook', 'twitter', 'linkedin', 'wechat', 'weibo');
    
    foreach ($channels as $channel) {
        // 这里应调用各社交平台的API
        // 以下为模拟数据
        $posts = get_posts(array(
            'numberposts' => 20,
            'post_type' => 'post',
            'post_status' => 'publish'
        ));
        
        foreach ($posts as $post) {
            $shares = rand(0, 500);
            $engagements = rand(0, 1000);
            
            $this->save_performance_data(
                $post->ID,
                $channel,
                0, // 社交媒体不直接提供浏览量
                $engagements,
                0, // 转化数
                0, // 平均时间
                0, // 跳出率
                $shares
            );
        }
    }
}

/**
 * 收集邮件营销数据
 */
private function collect_email_data() {
    // 模拟邮件营销数据
    $posts = get_posts(array(
        'numberposts' => 10,
        'post_type' => 'post',
        'post_status' => 'publish'
    ));
    
    foreach ($posts as $post) {
        $opens = rand(100, 5000);
        $clicks = rand(10, 500);
        $conversions = rand(1, 50);
        
        $this->save_performance_data(
            $post->ID,
            'email',
            $opens, // 邮件打开数视为浏览量
            $clicks, // 点击数为互动数
            $conversions,
            0, // 平均时间
            0, // 跳出率
            0  // 分享数
        );
    }
}

/**
 * 保存性能数据到数据库
 */
private function save_performance_data($content_id, $channel, $views, $engagements, 
                                      $conversions, $avg_time, $bounce_rate, $shares) {
    global $wpdb;
    
    $table_name = $wpdb->prefix . 'fca_content_performance';
    
    $wpdb->insert(
        $table_name,
        array(
            'content_id' => $content_id,
            'channel' => $channel,
            'publish_date' => get_the_date('Y-m-d H:i:s', $content_id),
            'views' => $views,
            'engagements' => $engagements,
            'conversions' => $conversions,
            'avg_time_spent' => $avg_time,
            'bounce_rate' => $bounce_rate,
            'social_shares' => $shares,
            'collected_date' => date('Y-m-d')
        ),
        array('%d', '%s', '%s', '%d', '%d', '%d', '%f', '%f', '%d', '%s')
    );
}

/**
 * 手动触发数据收集
 */
public function manual_collect() {
    $this->collect_daily_data();
    return true;
}

}


## 插件核心类与AJAX处理

最后,创建核心类来整合所有功能,在`includes/class-core.php`中:

<?php
/**

  • 插件核心类
  • 负责初始化和协调各个模块
    */

class FCA_Core {


private static $instance = null;
private $dashboard;
private $analytics;
private $data_collector;

public static function get_instance() {
    if (null === self::$instance) {
        self::$instance = new self();
    }
    return self::$instance;
}

private function __construct() {
    $this->init_hooks();
    $this->init_components();
}

/**
 * 初始化WordPress钩子
 */
private function init_hooks() {
    // 注册AJAX处理
    add_action('wp_ajax_fca_update_chart', array($this, 'ajax_update_chart'));
    add_action('wp_ajax_fca_generate_report', array($this, 'ajax_generate_report'));
    
    // 注册管理页面
    add_action('admin_init', array($this, 'register_settings'));
    
    // 添加文章编辑页面的元框
    add_action('add_meta_boxes', array($this, 'add_content_meta_box'));
    
    // 计划每日数据收集任务
    if (!wp_next_scheduled('fca_daily_data_collection')) {
        wp_schedule_event(time(), 'daily', 'fca_daily_data_collection');
    }
}

/**
 * 初始化组件
 */
private function init_components() {
    $this->dashboard = new FCA_Dashboard();
    $this->analytics = new FCA_Analytics();
    $this->data_collector = new FCA_Data_Collector();
}

/**
 * AJAX更新图表数据
 */
public function ajax_update_chart() {
    check_ajax_referer('fca_ajax_nonce', 'nonce');
    
    $content_id = intval($_POST['content_id']);
    $period = sanitize_text_field($_POST['period']);
    
    $comparison = $this->analytics->compare_channels_performance($content_id, $period);
    
    $labels = array_keys($comparison);
    $scores = array_column($comparison, 'performance_score');
    $views = array_column($comparison, 'views');
    
    wp_send_json_success(array(
        'labels' => $labels,
        'scores' => $scores,
        'views' => $views
    ));
}

/**
 * AJAX生成报告
 */
public function ajax_generate_report() {
    check_ajax_referer('fca_ajax_nonce', 'nonce');
    
    $content_ids = array_map('intval', $_POST['content_ids']);
    $channels = array_map('sanitize_text_field', $_POST['channels']);
    $date_from = sanitize_text_field($_POST['date_from']);
    $date_to = sanitize_text_field($_POST['date_to']);
    $format = sanitize_text_field($_POST['format']);
    
    // 生成报告数据
    $report_data = $this->generate_report_data($content_ids, $channels, $date_from, $date_to);
    
    // 根据格式返回结果
    if ($format === 'csv') {
        $this->generate_csv_report($report_data);
    } else {
        wp_send_json_success(array(
            'html' => $this->generate_html_report($report_data)
        ));
    }
}

/**
 * 添加文章编辑页面的元框
 */
public function add_content_meta_box() {
    add_meta_box(
        'fca_content_analytics',
        '内容效果分析',
        array($this, 'render_content_meta_box'),
        'post',
        'side',
        'high'
    );
}

/**
 * 渲染文章编辑页面的元框
 */
public function render_content_meta_box($post) {
    $performance = $this->analytics->calculate_channel_performance($post->
本文来自网络,不代表柔性供应链服务中心立场,转载请注明出处:https://mall.org.cn/6178.html

EXCHANGES®作者

上一篇
下一篇

为您推荐

发表回复

联系我们

联系我们

18559313275

在线咨询: QQ交谈

邮箱: vip@exchanges.center

工作时间:周一至周五,9:00-17:30,节假日休息
返回顶部