You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为WordPress评论列表的课程讲师列添加筛选功能?

为WordPress评论列表添加课程讲师筛选功能

一、添加讲师筛选下拉框

通过restrict_manage_comments钩子在评论列表顶部插入筛选下拉菜单,展示所有课程讲师(请根据你的LMS实际情况替换讲师角色名称):

function add_instructor_comment_filter() {
    // 获取所有课程讲师,替换为你的讲师角色
    $instructors = get_users(array(
        'role' => 'teacher',
        'orderby' => 'display_name',
        'order' => 'ASC'
    ));
    ?>
    <select name="instructor_filter" id="instructor_filter">
        <option value=""><?php _e('所有讲师', 'text-domain'); ?></option>
        <?php foreach ($instructors as $instructor) : ?>
            <option value="<?php echo esc_attr($instructor->ID); ?>" <?php selected($_GET['instructor_filter'], $instructor->ID); ?>>
                <?php echo esc_html($instructor->display_name); ?>
            </option>
        <?php endforeach; ?>
    </select>
    <?php
}
add_action('restrict_manage_comments', 'add_instructor_comment_filter');

二、根据筛选条件过滤评论查询

使用pre_get_comments钩子修改评论查询逻辑,仅展示选中讲师对应课程的评论:

function filter_comments_by_instructor($query) {
    // 仅在后台评论列表生效,且当前用户有权限操作评论
    if (!is_admin() || !$query->is_main_query() || !current_user_can('edit_comments')) {
        return;
    }

    // 获取筛选的讲师ID
    $instructor_id = isset($_GET['instructor_filter']) ? absint($_GET['instructor_filter']) : 0;
    if ($instructor_id > 0) {
        // 获取该讲师的所有课程ID,替换为你的课程自定义文章类型slug
        $course_ids = get_posts(array(
            'post_type' => 'course',
            'post_status' => 'publish',
            'author' => $instructor_id,
            'fields' => 'ids',
            'posts_per_page' => -1
        ));

        if (!empty($course_ids)) {
            // 仅保留这些课程的评论
            $query->set('post__in', $course_ids);
        } else {
            // 若讲师无课程,返回空结果
            $query->set('post__in', array(0));
        }
    }
}
add_action('pre_get_comments', 'filter_comments_by_instructor');

三、讲师自动过滤自身评论(可选)

如果需要让登录的讲师默认仅查看自己课程的评论,无需手动选择筛选,可添加以下代码实现自动过滤:

function auto_filter_instructor_comments($query) {
    if (!is_admin() || !$query->is_main_query() || !current_user_can('edit_comments')) {
        return;
    }

    $current_user = wp_get_current_user();
    // 判断当前用户是否为讲师角色,且不是管理员
    if (in_array('teacher', $current_user->roles) && !current_user_can('manage_options')) {
        // 获取当前讲师的课程ID
        $course_ids = get_posts(array(
            'post_type' => 'course',
            'post_status' => 'publish',
            'author' => $current_user->ID,
            'fields' => 'ids',
            'posts_per_page' => -1
        ));

        if (!empty($course_ids)) {
            $query->set('post__in', $course_ids);
        } else {
            $query->set('post__in', array(0));
        }
        // 隐藏筛选框,防止讲师切换查看其他讲师的评论
        remove_action('restrict_manage_comments', 'add_instructor_comment_filter');
    }
}
add_action('pre_get_comments', 'auto_filter_instructor_comments', 9); // 设为更高优先级,确保先执行自动过滤

四、关键替换说明

  • 将代码中的teacher替换为你的LMS实际使用的讲师角色名称。
  • 将course替换为你的LMS课程自定义文章类型的slug。
  • 代码可添加到主题/子主题的functions.php文件,或通过自定义插件引入。

内容的提问来源于stack exchange,提问作者Víctor Calderón

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:05:26