如何为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
相关产品推荐
相关产品推荐

