如何使用LearnDash插件创建课时播放列表及解决无法获取指定课时视频的问题
你当前代码无法获取视频资源的核心原因是LearnDash的课时视频URL不会直接挂载在WP_Post对象的属性中,而是存储在wp_postmeta表中,需要通过get_post_meta方法读取,同时你的短码实现不符合WordPress规范,直接echo输出会导致内容位置错乱。
修复后的完整代码如下:
add_shortcode( 'playlist', 'playlist_for_LMS' ); function playlist_for_LMS() { $output = ''; $user_id = get_current_user_id(); // 获取用户已报名课程 $courses = learndash_user_get_enrolled_courses( $user_id, array(), true ); // 先判断用户是否有已报名课程,避免报错 if ( empty( $courses ) ) { return '暂无已报名课程'; } // 取第一个课程的课时列表 $lessons = learndash_get_course_lessons_list( $courses[0], $user_id, array(), true ); foreach ( $lessons as $lesson ) { $lesson_id = $lesson['post']->ID; // 正确读取课时视频URL的方法 $lesson_video_url = get_post_meta( $lesson_id, 'lesson_video_url', true ); $post_image = get_the_post_thumbnail( $lesson_id ); $post_title = $lesson['post']->post_title; $post_link = get_post_permalink( $lesson_id ); // 拼接输出内容,不要直接echo $output .= '<a href="'.esc_url($post_link).'">'.esc_html($post_title).' '.esc_url($lesson_video_url).'</a><br>'; } return $output; }
关键改动说明:
- 新增了课程空值判断,避免用户无已报名课程时出现PHP报错
- 替换了直接读取WP_Post对象属性的错误写法,改用
get_post_meta()读取LearnDash存储的视频URL自定义字段 - 遵循WordPress短码开发规范,将内容拼接后return而非直接echo,避免短码输出位置错误
- 新增了
esc_url()、esc_html()转义输出,提升代码安全性
内容的提问来源于stack exchange,提问作者Danish Laeeq
相关产品推荐
相关产品推荐

