任务发布系统 CMS 定制化开发与高级功能实践

CMS 系统中实现任务发布功能,需要深入定制化开发。以下基于 WordPress 平台,结合 WP-CLI 和自定义 post type,提供高级功能实现方案。

创建任务 Post Type

通过注册自定义 Post Type 实现“任务”数据模型。在主题的 functions.php 文件中添加以下代码:

function register_task_post_type() {
    $args = array(
        'labels' => array(
            'name' => _x('任务', 'post type general name', 'textdomain'),
            'singular_name' => _x('任务', 'post type singular name', 'textdomain'),
        ),
        'public' => true,
        'has_archive' => true,
        'supports' => array('title', 'editor', 'custom_fields'),
        'menu_position' => 5,
    );
    register_post_type('task', $args);
}
add_action('init', 'register_task_post_type');

代码注册了支持标题、编辑器和自定义字段的“任务”内容类型,并设置菜单位置。

添加高级自定义字段

使用 Advanced Custom Fields 插件(ACF)创建任务相关字段:

{
    "key": "field_task_priority",
    "label": "优先级",
    "name": "task_priority",
    "type": "select",
    "choices": [
        {"label": "高", "value": "high"},
        {"label": "中", "value": "medium"},
        {"label": "低", "value": "low"}
    ]
}

该字段用于设置任务优先级,支持高、中、低三级选项。

实现任务状态管理

通过自定义字段控制任务状态流转:

function get_task_status($post_id) {
    $status = get_post_meta($post_id, 'task_status', true);
    return $status ? $status : '待处理';
}
add_filter('the_title', function($title, $post_id) {
    $status = get_task_status($post_id);
    return "[$status] {$title}";
});

代码实现了任务状态显示和标题增强功能。

开发任务调度功能

结合 WP-Cron 实现定时任务调度:

function schedule_task($task_id) {
    $priority = get_post_meta($task_id, 'task_priority', true);
    $interval = $priority === 'high' ? 5 : ($priority === 'medium' ? 15 : 30);
    wp_schedule_event(time(), 'every_' . $interval, 'run_task_' . $task_id);
}
add_action('run_task_' . $task_id, function() use ($task_id) {
    // 任务执行逻辑
    update_post_meta($task_id, 'task_status', '已完成');
});

根据优先级设置不同调度间隔,完成后自动更新状态。

构建任务列表管理界面

使用 WP_List_Table 实现自定义管理表单:

class Task_List_Table extends WP_List_Table {
    public function __construct() {
        parent::__construct(array(
            'singular' => 'task',
            'plural' => 'tasks',
            'ajax' => false
        ));
    }
    public function get_columns() {
        return array(
            'cb' => ' ',
            'title' => '任务名称',
            'status' => '状态',
            'priority' => '优先级',
            'date' => '创建日期'
        );
    }
    public function get_sortable_columns() {
        return array(
            'title' => array('title', true),
            'date' => array('date', true)
        );
    }
    public function prepare_items() {
        $columns = $this->get_columns();
        $hidden = array();
        $sortable = $this->get_sortable_columns();
        $this->set_pagination_args(array(
            'per_page' => 20
        ));
        $tasks = get_posts(array(
            'post_type' => 'task',
            'posts_per_page' => -1
        ));
        $this->items = $tasks;
        parent::prepare_items();
    }
}

该类实现了任务列表的展示和管理功能。

实现任务分配功能

通过 AJAX 实现任务分配操作:

<jQuery(document).ready(function($) {
    $('assign-task').on('click', function() {
        var taskId = $(this).data('task-id');
        var assignee = $('assignee').val();
        $.ajax({
            url: ajaxurl,
            data: {
                action: 'assign_task',
                task_id: taskId,
                assignee: assignee
            },
            success: function(response) {
                alert(response.data.message);
            }
        });
    });
});

该代码通过 AJAX 实现任务分配功能。

集成通知系统

使用 WP_Mail 实现任务通知功能:

function send_task_notification($task_id) {
    $task = get_post($task_id);
    $assignee = get_user_by('id', get_post_meta($task_id, 'task_assignee', true));
    $subject = "新任务通知:{$task->post_title}";
    $message = "您好,您有一个新任务:{$task->post_content}";
    wp_mail($assignee->user_email, $subject, $message);
}

代码实现了任务通知功能。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。