הרשמה של משתמש חדש עם טופס אלמנטור והוספה לקורס ב-Learndash (בלי תוספים)

תאריך פרסום: 09/12/2023
איך ליצור אוטומציה ללא תוסף שבעת שליחה של טופס אלמנטור יוצרת משתמש חדש וכבונוס משייכת אותו גם לקורס לבחירתנו ב-LearnDash

אוקיי, אז יש לי תחביב כזה שאולי אהפוך אותו לפינה קבועה.
אני נתקל בשאלות שעולות בפוסטים בפייסבוק ומתחיל לגרד לי בגוף עד שאני מוצא להן פתרון.

לפעמים זה תגובה קצרה, ולפעמים זה הופך לקטע קוד יותר משמעותי.

אז השאלה הפעם היא:

היי חברים אשמח לעזרת ההמונים:
אתר קורסים Learndash + Elementor מעוניינת לפשר הרשמה לקורס באמצעות טופס אלמנטור. האם מישהו מכיר פתרון (עדיף ללא תוסף?)

תודה למשיבים 🙏

בואו נבין רגע מול מה אנחנו עומדים ואז נפרד את זה לפתרון מסודר.

אנחנו צריכים ליצור אוטומציה סביב טופס אלמנטור, שיוצרת משתמש ולאחר מכן משייכת את המשתמש החדש לקורס ב-LearnDash (או לרנדש, לבחירתכם).

אז בואו נחלק את הפתרון לשני חלקים:

  1. איך יוצרים משתמש חדש מטופס אלמנטור?
  2. איך משייכים את המשתמש שיצרנו זה עתה לקורס ב-Learndash?

נכון לכתיבת שורות אלה, אין אפשרות לפתוח משתמש על ידי After Submit Action בטפסים של אלמנטור ולכן נצטרך לפתור את זה גם באמצעות הקוד.

יצירת טופס באלמנטור

ניגש לעמוד שבו נרשמה למקם את הטופס וניצור טופס סטנדרטי (אלמנטור פרו).
בטופס נצטרך להכניס את השדות הבאים, אליהם יכניס הגולש את הפרטים שלו, ומהם ניצור את המשתמש.

שדהסוגמזההחובה?
שם פרטיטקסטfirst_nameלא
שם משפחהטקסטlast_nameלא
כתובת מיילמיילemailכן
סיסמהסיסמהpasswordכן

כמובן שאפשר להוסיף עוד שדות לפי הצורך, אלא הבסיסיים הדרושים להקמת משתמש.

מה עוד צריך לעשות? להגדיר את שם הטופס (Form Name) כ-״User Registration Form״
למה זה חשוב? כדי שנוכל להחיל את הפעולה בקוד מהשלבים הבאים על הטופס הזה בלבד ולא על כל טופס שישלח באלמנטור.

הוספת קוד אוטומציה לקובץ functions.php

לאחר שיצרנו את הטופס עם השדות הדרושים, נעבור לחלק של הוספת הקוד לקובץ התבנית.

אזהרה קטנה לפני, כמו בכל פעם שמוסיפים קוד לקבצי התבנית, שימו לב שאתם עובדים עם תבנית בת, במידה ולא, בעת שדרוג התבנית, קובץ functions.php יידרס והקוד שצרפתם יימחק.

ממשיכים, קטע הקוד ליצירת האוטומציה הוא זה (ומיד נפרק אותו לחלקים ונסביר מה כל חלק עושה):

// Register new user based on an Elementor Form submition and add access to learndash course.
// Documentation - https://shifft.online/uncategorized/elementor-form-user-creation/
add_action( 'elementor_pro/forms/new_record', 'shifft_register_user_and_assign_to_learndash_course' );
function shifft_register_user_and_assign_to_learndash_course( $record, $ajax_handler ) {

    $form_name = $record->get_form_settings( 'form_name' );
    
    if ( 'User Registration Form' !== $form_name ) {
        return;
    }

    $form_data = $record->get_formatted_data();
    $email     = $form_data['email'];
    $password  = $form_data['password'];

    $user = wp_create_user( $email, $password, $email );

    if ( is_wp_error( $user ) ) {
        $error_message = $user->get_error_message();

        $ajax_handler->add_error_message( "Failed to create new user: $error_message." );
        $ajax_handler->is_success = false;

        return;
    }

    $first_name = $form_data['first_name'];
    $last_name  = $form_data['first_name'];

    wp_update_user( [
        "ID"         => $user,
        "first_name" => $first_name,
        "last_name"  => $last_name
    ]);

    if ( function_exists( 'ld_update_course_access' ) ) {
        $course_id = 123;
        ld_update_course_access( $user, $course_id );    
    }

    $credentials = [
        "user_login"    => $username,
        "user_password" => $password,
        "remember"      => true,
    ];

    $signin = wp_signon( $credentials );

    if ( $signin ) {
        $ajax_handler->add_response_data( 'redirect_url', get_home_url() );
    }

}

לאחר הדבקת קטע הקוד ב-functions.php נשאר לכם רק לקפוץ לשורה 40, ולהחליף את המספר ״123״ שמופיע לאחר המשתנה course_id למזהה הקורס (ID) שתרצו לצרף אליו את המשתמש החדש.

בשלב הזה תוכלו לשמור את השינויים ולבדוק את הטופס החדש שלכם.

בואו נבין מה קורה בקטע הקוד הזה

למטיבי הלכת שרוצים להבין מה קורה בקטע הקוד הזה, להלן הסברים:

$form_name = $record->get_form_settings( 'form_name' );
    
    if ( 'User Registration Form' !== $form_name ) {
        return;
    }

לאחר שליחת הטופס, נוודא ששם הטופס שלנו הוא ״User Registration Form״ כדי להמנע מהפעל הקוד על טפסים לא רצויים, במידה וזה לא השם, מפסיקים את הפעולה.

$form_data = $record->get_formatted_data();
    $email     = $form_data['email'];
    $password  = $form_data['password'];

    $user = wp_create_user( $email, $password, $email );

    if ( is_wp_error( $user ) ) {
        $error_message = $user->get_error_message();

        $ajax_handler->add_error_message( "Failed to create new user: $error_message." );
        $ajax_handler->is_success = false;

        return;
    }

זה השלב שבוא אנחנו אוספים מהטופס שנשלח את פרטי המשתמש (מייל וסיסמה) ויוצרים משתמש חדש.
אני באופן אישי אוהב לשייך את המייל לשם המשתמש, במידה ותרצו אחרת, ניתן להוסיף את שם המשתמש בטופס ולמשוך אותו לכאן.

לאחר יצירת המשתמש, אנחנו עושים בדיקה שלא קיבלנו שגיאה כמו משתמש שכבר קיים עם המייל שסופק, תקלה בוורדפרס, או כל אירוע אחר, במידה ואין תקלה מתקדמים הלאה.

$first_name = $form_data['first_name'];
$last_name  = $form_data['first_name'];

wp_update_user( [
    "ID"         => $user,
    "first_name" => $first_name,
    "last_name"  => $last_name
]);

בחלק הזה אנחנו ממשיכים לאסוף מידע מהטופס, הפעם את השם הפרטי ושם המשפחה, ומעדכנים את המשתמש החדש שיצרנו עם פרטים אלה.

if ( function_exists( 'ld_update_course_access' ) ) {
    $course_id = 123;
    ld_update_course_access( $user, $course_id );    
}

החלק המעניין, אנחנו מבצעים בדיקה האם LearnDash מותקן באתר שלנו, במידה וכן אנחנו משייכים את המשתמש הקיים לקורס על פי ה-Course_ID שנבחר.

זה המקום לשנות את ה-Course Id למזהה הקורס שתרצו לשייך אליו את המשתמש.
במידה ותרצו לשייך לכמה קורסים, יש אפשרות להריץ את הפקודה ״ld_update_course_access״ מספר פעמים, כל פעם עם מזהה קורס אחר, או לחילופין, לשייך את המשתמש ל-Group ב-LearnDash ולשייך אליה את הקורסים הרלוונטיים.

$credentials = [
    "user_login"    => $username,
    "user_password" => $password,
    "remember"      => true,
];

$signin = wp_signon( $credentials );

if ( $signin ) {
    $ajax_handler->add_response_data( 'redirect_url', get_home_url() );
}

החלק האחרון, אנחנו מחברים את המשתמש החדש שיצרנו ומנתבים אותו לעמוד הבית להמשך הגלישה.

סיכום

בשלב הזה יש לנו אוטומציה עובדת, לאחר שליחת טופס אלמנטור, אנחנו פותחים משתמש, משייכים אותו לקורס הנבחר, מחברים אותו למערכת ומנתבים אותו לעמוד הבית.

ניתן להתאים כל אחד מהשלבים באוטומציה הזאת כדי להפוך אותה למדוייקת לצרכים שלכם, מוזמנים לנסות ולכתוב בתגובות אם צריכים/ות עזרה.

כתיבת תגובה