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

如何使用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).'&nbsp;'.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:45:03