2026年5月24日

2026年5月24日

WordPressのLearnDash・LifterLMSでオンライン学習サイトを構築する方法

はじめに

WordPressでオンライン学習サイト(LMS:Learning Management System)を構築するには、LearnDash・LifterLMS・Tutor LMSなどの専用プラグインを活用するのが最も効率的です。本記事では各LMSプラグインの特徴を比較した上で、コース・レッスン・クイズの構造設計、アクセスコントロール、進捗管理、WooCommerceとの連携まで実践的な実装方法を解説します。

症状・原因

  • LMSプラグインを選定したいがLearnDash・LifterLMS・Tutor LMSの違いがわからない
  • コース購入後のアクセス制限が適切に機能せず、未購入ユーザーにコンテンツが見えてしまう
  • 学習進捗のトラッキングや修了証明書の自動発行を実装したい

解決手順

ステップ1:LMSプラグインの選定(LearnDash vs LifterLMS vs Tutor LMS)

# LMSプラグイン比較表
LearnDash:
  価格: $199/年(1サイト)〜
  特徴:
    - 最も機能が豊富で大規模サイト向け
    - ProPanel(高度な進捗ダッシュボード)
    - グループ学習・コース割り当て機能
    - 豊富なアドオンとインテグレーション
  適合ケース: 企業研修・大学・大規模eLearning
  WooCommerce統合: LearnDash WooCommerce Integration (無料アドオン)

LifterLMS:
  価格: Core無料 + アドオン課金(年$99〜)
  特徴:
    - 無料版でも基本機能が充実
    - メンバーシップ機能が内蔵
    - Engagements(バッジ・修了証)が標準搭載
    - 決済ゲートウェイが内蔵(PayPal/Stripe)
  適合ケース: 中小規模コース・個人インストラクター
  WooCommerce統合: LifterLMS WooCommerce Add-on ($99/年)

Tutor LMS:
  価格: Free + Pro $149/年
  特徴:
    - モダンなUI/UX(Gutenbergネイティブ)
    - フロントエンドコース作成機能
    - 動画ホスティング統合(Bunny.net/YouTube/Vimeo)
    - 最安でPro機能が充実
  適合ケース: コンテンツクリエーター・コーチング
  WooCommerce統合: 内蔵(Tutor LMS Pro)

ステップ2:コース・レッスン・クイズの構造を設計・作成する

<?php
// LearnDashのコースをプログラムで作成する例
// WP-CLIまたはAPIから一括インポートする際に使用

function create_learndash_course( $course_data ) {
    // コース(親)を作成
    $course_id = wp_insert_post( array(
        'post_type'    => 'sfwd-courses', // LearnDashのコース投稿タイプ
        'post_title'   => $course_data['title'],
        'post_content' => $course_data['description'],
        'post_status'  => 'publish',
    ) );

    // コースのLearnDash設定を保存
    update_post_meta( $course_id, '_sfwd-courses', array(
        'sfwd-courses_course_price_type' => 'closed',     // 要登録
        'sfwd-courses_course_price'      => $course_data['price'],
        'sfwd-courses_course_points'     => 10,           // 完了ポイント
        'sfwd-courses_certificate'       => 0,            // 修了証明書ID
    ) );

    // セクションとレッスンを作成
    foreach ( $course_data['sections'] as $section_index => $section ) {
        // セクション(トピック)を作成
        $lesson_id = wp_insert_post( array(
            'post_type'    => 'sfwd-lessons',
            'post_title'   => $section['title'],
            'post_content' => $section['content'],
            'post_status'  => 'publish',
            'post_parent'  => $course_id,
            'menu_order'   => $section_index,
        ) );

        // レッスンをコースに関連付け
        update_post_meta( $lesson_id, 'course_id', $course_id );
        update_post_meta( $lesson_id, '_sfwd-lessons', array(
            'sfwd-lessons_course'        => $course_id,
            'sfwd-lessons_lesson_video'  => $section['video_url'] ?? '',
        ) );
    }

    return $course_id;
}

// LifterLMSでのコース作成
function create_llms_course( $title, $description, $price ) {
    $course = new LLMS_Course( 'new' );
    $course->set( 'post_title', $title );
    $course->set( 'post_content', $description );
    $course->set( 'post_status', 'publish' );

    // 価格設定
    $course->set( 'price', $price );
    $course->set( 'sale_enabled', 'no' );
    $course->set( 'access_opens_date', '' );

    $course->save();
    return $course->get( 'id' );
}

ステップ3:コースアクセスコントロールとメンバーシップ連携

<?php
// LearnDashのコースアクセス制御
add_filter( 'learndash_content_access', 'custom_course_access', 10, 3 );
function custom_course_access( $access, $post_id, $user_id ) {
    // 管理者は常にアクセス可能
    if ( user_can( $user_id, 'manage_options' ) ) {
        return true;
    }

    // カスタムユーザーメタでアクセスを確認
    $enrolled_courses = get_user_meta( $user_id, 'enrolled_courses', true ) ?: array();

    if ( in_array( $post_id, $enrolled_courses, true ) ) {
        return true;
    }

    // WooCommerceの購入履歴を確認
    if ( class_exists( 'WooCommerce' ) ) {
        $product_id = get_post_meta( $post_id, '_wc_product_id', true );
        if ( $product_id && wc_customer_bought_product( '', $user_id, $product_id ) ) {
            // 購入済みならメタに追加してキャッシュ
            $enrolled_courses[] = $post_id;
            update_user_meta( $user_id, 'enrolled_courses', $enrolled_courses );
            return true;
        }
    }

    return false;
}

// LifterLMSでのアクセス制御
// LifterLMS自体がアクセス管理を提供するため、フィルターで拡張する
add_filter( 'llms_is_course_open', 'custom_llms_access', 10, 2 );
function custom_llms_access( $is_open, $course_id ) {
    // プレビューモード(管理者向け)
    if ( current_user_can( 'manage_options' ) ) {
        return true;
    }
    return $is_open;
}

ステップ4:進捗トラッキングと修了証明書の自動発行

<?php
// LearnDashのコース完了時に修了証明書を送信
add_action( 'learndash_course_completed', 'send_completion_certificate', 10, 1 );
function send_completion_certificate( $data ) {
    $user_id   = $data['user']->ID;
    $course_id = $data['course']->ID;
    $user      = $data['user'];

    // 修了証明書PDFのURLを取得(LearnDash証明書プラグインが必要)
    $cert_url = learndash_get_certificate_link( $course_id, $user_id );

    // 修了通知メールを送信
    $course_title = get_the_title( $course_id );
    $subject      = sprintf( '【修了証明】%s を修了しました', $course_title );
    $message      = sprintf(
        "こんにちは %s さん\n\n%s を修了しました。\n\n修了証明書: %s\n\n引き続き学習をお楽しみください。",
        $user->display_name,
        $course_title,
        $cert_url
    );

    wp_mail( $user->user_email, $subject, $message );

    // 修了ポイントをユーザーメタに記録
    $total_points = (int) get_user_meta( $user_id, 'learndash_points', true );
    $course_points = (int) get_post_meta( $course_id, '_sfwd-courses_course_points', true );
    update_user_meta( $user_id, 'learndash_points', $total_points + $course_points );
}

// LifterLMSの進捗クエリ
function get_student_progress( $user_id, $course_id ) {
    $student = new LLMS_Student( $user_id );

    return array(
        'enrollment_status' => $student->get_enrollment_status( $course_id ),
        'progress'          => $student->get_progress( $course_id, 'course' ), // 0-100
        'completed_lessons' => $student->get_completed_lessons( $course_id ),
        'last_activity'     => $student->get_last_activity( $course_id ),
        'grade'             => $student->get_grade( $course_id ),
    );
}

ステップ5:WooCommerceとのコース販売連携

<?php
// WooCommerceの注文完了時にコースへ自動登録(LearnDash版)
add_action( 'woocommerce_order_status_completed', 'enroll_user_on_purchase', 10, 1 );
function enroll_user_on_purchase( $order_id ) {
    $order   = wc_get_order( $order_id );
    $user_id = $order->get_user_id();

    if ( ! $user_id ) {
        return; // ゲスト購入は処理しない(アカウント必須にする)
    }

    foreach ( $order->get_items() as $item ) {
        $product_id = $item->get_product_id();

        // 商品に紐づくコースIDを取得(商品メタデータ)
        $course_id = get_post_meta( $product_id, '_learndash_course_id', true );

        if ( $course_id ) {
            // LearnDashのコースに登録
            ld_update_course_access( $user_id, $course_id, false ); // false = enroll

            // 登録完了メールを送信
            $user       = get_user_by( 'id', $user_id );
            $course_url = get_permalink( $course_id );
            wp_mail(
                $user->user_email,
                get_the_title( $course_id ) . 'へのアクセスが有効になりました',
                "コースはこちらからアクセスできます: {$course_url}"
            );
        }
    }
}

// WooCommerceでコース商品を作成するヘルパー関数
function create_wc_course_product( $course_id, $price, $sale_price = 0 ) {
    $course_title = get_the_title( $course_id );

    // シンプル商品を作成
    $product = new WC_Product_Simple();
    $product->set_name( $course_title );
    $product->set_status( 'publish' );
    $product->set_price( $price );
    $product->set_regular_price( $price );
    $product->set_virtual( true );     // ダウンロード不要のデジタル商品
    $product->set_downloadable( false );

    if ( $sale_price > 0 ) {
        $product->set_sale_price( $sale_price );
    }

    $product_id = $product->save();

    // 商品とコースを紐づけるメタ
    update_post_meta( $product_id, '_learndash_course_id', $course_id );
    update_post_meta( $course_id, '_wc_product_id', $product_id );

    return $product_id;
}

注意事項

  • プラグイン選択: LearnDashは企業規模で機能が豊富ですが高価です。個人・中小規模ではLifterLMS(無料Core)またはTutor LMS Proが費用対効果が高いです
  • 動画ホスティング: コース動画をWordPressのメディアライブラリにアップロードするとサーバー負荷が大きくなります。Bunny.net、Vimeo Pro、またはYouTube(限定公開)での動画配信を強く推奨します
  • 受講者データの保護: GDPRや個人情報保護法に基づき、受講履歴・進捗データの取り扱いに関するプライバシーポリシーを整備してください
  • クイズのカンニング対策: ブラウザの戻るボタンで再挑戦できないよう、LearnDashのクイズ設定で「タイマー」と「ページ送り禁止」を有効にしてください

まとめ

WordPressのLMS構築はLearnDash(大規模・企業向け)、LifterLMS(中規模・コスパ重視)、Tutor LMS(モダンUI・クリエーター向け)から用途に合ったプラグインを選択することが重要です。WooCommerceとの連携により決済から受講管理まで一元化したeLearningプラットフォームを構築できます。関連記事:WordPressのWooCommerceで物販サイトを構築する方法

お気軽にご相談ください

お見積りへ お問い合わせへ