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で物販サイトを構築する方法