קודים שימושיים לטפסי אלמנטור
תוכן עניינים
טופסי Elementor (אלמנטור) מאפשרים לבנות בקלות טפסי יצירת קשר, רישום ועוד – אך לפעמים נרצה יכולות עיצוב או פונקציונליות מעבר למה שקיים כברירת מחדל. באמצעות הוספת קוד מותאם אישית ניתן לשפר את הטפסים לשלוט באופן מלא בעיצוב הטופס, להוסיף אינטראקטיביות מיוחדת בצד הלקוח, ולהרחיב את פעולות העיבוד בצד השרת מעבר לאפשרויות המובנות.
אלמנטור פרו מקל על הוספת קוד כזה לאתר: יש אפשרות להוסיף CSS מותאם אישית לכל אלמנט בעורך, וכן להוסיף קוד JavaScript ו-HTML דרך פיצ’ר ה-“Custom Code” הגלובלי . במדריך זה נראה דוגמאות שימושיות בקוד לשלושת התחומים – CSS, JavaScript ו-PHP – המסייעות בשיפור טפסי אלמנטור כל דוגמה תלווה בהסבר ברור כך שתוכלו להתאים אותה לצרכים שלכם.
שינוי סדר השדות באמצעות CSS
לפעמים נרצה לשנות את מיקומם היחסי של שדות הטופס ללא גרירה ידנית בעורך – למשל כדי לסדר שדות בצורה שונה במובייל לעומת מחשב. ניתן לעשות זאת באמצעות תכונת ה-order של CSS על אלמנטי השדות.
לכל שדה בטופס אלמנטור יש עטיפה עם מחלקת CSS ייחודית. לרוב המחלקת כוללת את מזהה השדה (ID) שהוגדר לו. למשל, אם לשדה ה”אימייל” הגדרנו ID בשם “email”, לעטיפת השדה יהיה Class בשם .elementor-field-group-email. ניתן להוסיף Class ייחודי גם לטופס כולו (למשל my-form) לצורך מיקוד הסלקטור. לאחר מכן, נגדיר כל שדה בסדר הרצוי.לדוגמה, נניח שברצוננו להציג את שדה האימייל בראש הטופס, לפני שדות אחרים, נשתמש בקוד הבא:
.my-form .elementor-field-group-email {
order: -1;
}
ניתן גם להגביל שינוי סדר לתצוגת מובייל. למשל, אם נרצה שבתצוגה צרה שדה מסוים יוצג מעל אחר (למרות שבדסקטופ הסדר שונה), אפשר לעטוף את הסלקטורים ב-@media
המתאים. לדוגמה:
@media(max-width: 768px) {
.my-form .elementor-field-group-phone { order: 2; } /* שדה "טלפון" יוצג שני */
.my-form .elementor-field-group-name { order: 1; } /* שדה "שם" יוצג ראשון */
}
שינוי הסדר יכול להיות שימושי מאוד להעביר את מיקום שדה ההסכמה (שדה אישור תנאים / שדה אישור דיוור) לאחרי כפתור השליחה בטופס
selector .elementor-field-type-acceptance {
order:4;
}
עיצוב תיבות סימון וכפתורי רדיו בטופס אלמנטור
אלמנטור מאפשר להוסיף שדות מסוג Checkbox (תיבת סימון) ו-Radio (כפתורי בחירה), אך העיצוב שלהם מוגבל לברירת המחדל של הדפדפן. עם CSS מתקדם, נוכל להחליף את מראה תיבות הסימון והכפתורים בסגנון מותאם אישית – למשל להציג תיבה מרובעת מעוצבת או עיגול ממולא במקום התיבה/עיגול הרגילים.
הרעיון הוא להסתיר את האלמנט הקלט המקורי של checkbox/radio, ובמקומו להשתמש ב-Pseudo-elements של התווית (label) כדי לצייר את הצורה הרצויה. לאחר מכן נגדיר מצבים עבור כשהתיבה מסומנת (Checked) כדי לשנות את העיצוב או להציג סימן ✓.
הנה דוגמה עבור Checkbox (תיבת סימון) בהתאמה אישית:
/* הסתרת תיבת הסימון המקורית */
.my-form .elementor-field-group-my_checkbox input[type="checkbox"] {
position: absolute;
opacity: 0;
pointer-events: none;
}
/* יצירת ריבוע מותאם לפני הטקסט של התווית */
.my-form .elementor-field-group-my_checkbox label:before {
content: "";
display: inline-block;
width: 16px;
height: 16px;
border: 2px solid #777; /* מסגרת אפורה לתיבה */
border-radius: 3px;
margin-right: 8px; /* רווח בין התיבה לטקסט של התווית */
vertical-align: middle;
background: transparent;
transition: all 0.2s ease;
}
/* עיצוב התיבה במצב Hover (כאשר מעבירים עליה עכבר) */
.my-form .elementor-field-group-my_checkbox input[type="checkbox"]:hover + label:before {
border-color: #4632da; /* שינוי צבע המסגרת בסימון לרחף */
}
/* מצב מסומן (Checked) - מילוי התיבה והצגת סימן ✓ */
.my-form .elementor-field-group-my_checkbox input[type="checkbox"]:checked + label:before {
background-color: #4632da; /* מילוי הרקע בצבע מותג כשמסומן */
border-color: #4632da; /* שינוי צבע המסגרת גם כן */
}
.my-form .elementor-field-group-my_checkbox input[type="checkbox"]:checked + label:after {
content: "";
position: absolute;
left: 5px;
top: 2px;
width: 4px;
height: 8px;
border: solid #fff;
border-width: 0 2px 2px 0;
transform: rotate(45deg);
}
שדות מותנים בטופס אלמנטור
באמצעות JavaScript ניתן להוסיף לטופס התנהגות דינמית בצד הלקוח – כלומר בדפדפן של המשתמש – כדי לשפר את חוויית המילוי ואת האינטראקטיביות. עם JS נוכל ליצור שדות דינמיים (כגון הצגה או הסתרה של שדות בהתאם לערכים שהוזנו),
יש שתי דרכים עיקריות לשילוב קוד JavaScript בטפסי אלמנטור:
- הוספת ווידג’ט HTML ליד הטופס המכיל את קוד ה-JS. ניתן לגרור ווידג’ט HTML אל העמוד ולמקם אותו מתחת לטופס, ובתוכו לשים תגיות
<script>
עם הקוד. קוד זה ירוץ בעת טעינת העמוד. - שימוש בפיצ’ר Custom Code של אלמנטור פרו להוספת קוד JS גלובלי או לעמוד ספציפי. באפשרות הזאת אפשר לקבוע שהקוד ירוץ ב-“Body end” למשל, כך שהקוד יפעל לאחר שכל ה-HTML של העמוד (כולל הטופס) נטען. יש לאפשרות זאת מעלה גדולה מבחינת ביצועים של טעינת העמוד
חשוב מאוד שקוד ה-JS ירוץ רק לאחר שהטופס קיים ב-DOM (כלומר נטען בדף). לכן, בדרך כלל עוטפים את הקוד ב-jQuery(document).ready(...)
או מאזינים לאירוע DOMContentLoaded
/load
. אלמנטור גם מספק אירועים מיוחדים אם הטופס בתוך פופאפ, תצטרכו להוסיף אותם לקוד במידה והטופס בפופאפ.
מה זה שדה מותנה? שדה שמופיע למשתמש רק אם הוא ענה תשובה מסוימת בשדה אחר. זה מאפשר לטופס “להתאים את עצמו” לפי הצורך. לדוגמה: בטופס יצירת קשר נוסיף שאלה “האם ברצונך לספק פרטי כתובת?”. אם המשתמש בוחר “כן”, יופיעו שדות כתובת, עיר ומיקוד. אם “לא” – שדות אלה יישארו מוסתרים.
נניח שהוספנו לטופס שדה מסוג Radio עם השאלה “האם להזין כתובת למשלוח?” ושתי אפשרויות: “כן” ו-“לא”. נגדיר לשדה זה ID, למשל useraddress
. כמו כן נוסיף שדות טקסט של “כתובת”, “עיר”, “מיקוד” וכו’ – וניתן לכולם ID משותף התחלתי, למשל addressInfo
, addressInfoCity
, addressInfoZip
וכו’. את שדות הכתובת האלו נרצה להסתיר כברירת מחדל, ולהציג רק אם המשתמש בחר “כן”. הקוד הבא מממש זאת:
שימו לב לא להגדיר את השדות המותנים כשדות חובה אחרת במקרה והלקוח בחר “לא” שליחת הטופס תכשל
מילוי שדות באופן אוטומטי
נוכל להשתמש ב-JavaScript כדי לבצע מילוי אוטומטי או חישובים בשדות, מה שחוסך עבודה למשתמש ומצמצם שגיאות הקלדה. להלן שני תרחישים לדוגמה:
לדוגמה, שילוב ערכי שדות: נניח שהטופס כולל שדה “שם פרטי”, שדה “שם משפחה” ושדה “שם מלא”. במקום לדרוש מהמשתמש להקליד שוב את שמו המלא, אפשר למלא באופן אוטומטי את השדה “שם מלא” על סמך השדות הפרטי ומשפחה. הקוד הבא ממחיש זאת (נניח שהגדרנו ID לכל אחד: fname
, lname
, fullname
בהתאמה):
שימו לב לא להגדיר את השדות המותנים כשדות חובה אחרת במקרה והלקוח בחר “לא” שליחת הטופס תכשל
מילוי שדה על סמך פרמטר ב-URL
לעיתים נרצה להעביר נתונים אל הטופס דרך הקישור. דוגמה נפוצה: בדף נחיתה יש טופס, ואנחנו שולחים אליו גולש עם לינק המכיל את האימייל שלו כפרמטר (…/[email protected]). ניתן לגרום לכך ששדה האימייל בטופס יתמלא אוטומטית בערך שבפרמטר. כך הגולש לא יצטרך למלא ידנית את כתובת האימייל שלו.
יש אפשרות מובנית באלמנטור פרו להגדיר ערך דיפולטיבי דינמי משדה GET – כלומר בלי קוד, באמצעות בחירת “שאילתא GET” עבור ערך ברירת המחדל של השדה.
זה יכול לשמש גם לשמירת שדות utm למעקב אחר הקמפיין באמצעות הוספת שדות מוסתרים כשערך השדה מוגדר לשאילתא get של הערכים
למחולל קישור utm לחצו כאן https://multidigital.net/utm_link_generator/
הוספת Webhook נוספים לטופס אלמנטור
לעיתים נרצה לאחר שליחת טופס מסוים, לבצע קריאה למספר Webhook (נניח, לCRM ובנוסף לשירות צד ג’ כלשהו) עם נתוני הטופס.
אלמנטור כברירת מחדל מאפשר רק Webhook אחד נכתוב קטע PHP שמתחבר לניו-רקורד ושולח את הנתונים.
add_action( 'elementor_pro/forms/new_record', function( $record, $ajax_handler ) {
// 1. בדיקה שזהו הטופס הרצוי (כדי שהקוד ירוץ רק עבור טופס ספציפי):
$form_name = $record->get_form_settings( 'form_name' );
if ( 'MY_FORM_NAME' !== $form_name ) {
return; // לא הטופס שאנו מכוונים אליו, יציאה ללא פעולה
}
// 2. שליפת כל שדות הטופס והערכים שלהם:
$raw_fields = $record->get( 'fields' );
$fields = [];
foreach ( $raw_fields as $id => $field ) {
$fields[ $id ] = $field['value'];
}
// 3. שליחת הנתונים לכתובת חיצונית באמצעות בקשת POST (לדוגמה, Webhook URL):
wp_remote_post( 'https://example.com/your-webhook-endpoint', [
'body' => $fields
] );
}, 10, 2 );
?>
את הקוד יש למקם בקובץ functions.php
של ערכת-הבן (Child Theme) שלכם, או להוסיף כ”Code Snippet” דרך תוסף ייעודי, כדי שיטען באתר. כך נראה הקוד:
הוספת פוסט עם טופס אלמנטור
אם נממש את הHook שהצענו בשליחת Webhook נוסף נוכל לממש את זה גם לפונקציות נוספות בלי ליצור פעולות אחרי שליחה נוספות בתוך האלמנטור
הנה קוד ליצירת פוסט חדש מטופס אלמנטור. זהו שימושי מאוד כאשר רוצים לאפשר למשתמשים לפרסם פוסט דרך טופס (למשל, מערכת מודעות, פרסום תוכן גולשים וכו’). וכן כאשר רוצים לשמור פניות מטופס לבלוג או לדף מותאם אישית.
add_action('elementor_pro/forms/new_record', function($record, $handler) {
// שם הטופס אליו הקוד יתייחס (כפי שמוגדר באלמנטור)
$form_name = $record->get_form_settings('form_name');
// התאמה לטופס מסוים בלבד
if ('my_custom_form' !== $form_name) {
return;
}
// קבלת השדות שהמשתמש מילא
$raw_fields = $record->get('fields');
$fields = [];
foreach ($raw_fields as $id => $field) {
$fields[$id] = $field['value'];
}
// יצירת פוסט חדש באתר
$new_post = array(
'post_title' => sanitize_text_field($fields['post_title']), // שם השדה באלמנטור: post_title
'post_content' => wp_kses_post($fields['post_content']), // שם השדה: post_content
'post_status' => 'pending', // ניתן לשנות ל 'publish' כדי לפרסם ישירות
'post_author' => get_current_user_id(), // משייך את הפוסט למשתמש הנוכחי
'post_type' => 'post', // ניתן לשנות ל'custom_post_type'
);
$post_id = wp_insert_post($new_post);
// במידה ורוצים להוסיף קטגוריות לפוסט (לדוגמה: קטגוריה עם ID 5)
if (!is_wp_error($post_id) && isset($fields['post_category'])) {
wp_set_post_categories($post_id, array($fields['post_category']));
}
}, 10, 2);
את הקוד יש למקם בקובץ functions.php
של ערכת-הבן (Child Theme) שלכם, או להוסיף כ”Code Snippet” דרך תוסף ייעודי, כדי שיטען באתר. כך נראה הקוד:
יצירת משתמש באתר וורדפרס עם טופס אלמנטור
כאשר רוצים לאפשר למשתמשים להירשם דרך טופס אלמנטור ללא שימוש בטופס הסטנדרטי של וורדפרס. לדוגמה כאשר רוצים שהנרשם ימלא שאלון או להוסיף שדות מותאמים אישית כמו מספר טלפון, עיר, תפקיד וכו’.
נשתמש בקוד הבא
add_action('elementor_pro/forms/new_record', function($record, $handler) {
// בדיקה שהטופס הוא זה שאנו רוצים לקלוט ממנו נתונים
$form_name = $record->get_form_settings('form_name');
if ('user_registration_form' !== $form_name) {
return;
}
// קבלת הנתונים מהשדות של אלמנטור
$raw_fields = $record->get('fields');
$fields = [];
foreach ($raw_fields as $id => $field) {
$fields[$id] = $field['value'];
}
$username = sanitize_user($fields['username']);
$email = sanitize_email($fields['email']);
$password = wp_generate_password(); // ניתן להחליף בסיסמה שמוזנת בטופס
// בדיקה אם המשתמש קיים
if (username_exists($username) || email_exists($email)) {
return;
}
// יצירת משתמש חדש
$user_id = wp_create_user($username, $password, $email);
if (!is_wp_error($user_id)) {
// הגדרת תפקיד משתמש כברירת מחדל
wp_update_user(array('ID' => $user_id, 'role' => 'subscriber'));
// הוספת שדות מותאמים אישית (לדוגמה: מספר טלפון)
if (isset($fields['phone'])) {
update_user_meta($user_id, 'phone_number', sanitize_text_field($fields['phone']));
}
// שליחת אימייל למשתמש עם הסיסמה
wp_mail($email, 'פרטי ההתחברות לאתר', "שם משתמש: $username\nסיסמה: $password\nכניסה לאתר: " . get_site_url());
}
}, 10, 2);
את הקוד יש למקם בקובץ functions.php
של ערכת-הבן (Child Theme) שלכם, או להוסיף כ”Code Snippet” דרך תוסף ייעודי, כדי שיטען באתר. כך נראה הקוד:
עדכון פרטי משתמש באתר וורדפרס עם טופס אלמנטור
כאשר רוצים לאפשר למשתמשים לשנות ולערוך את הפרטים דרך טופס אלמנטור ללא שימוש בטופס הסטנדרטי של וורדפרס. לדוגמה כאשר רוצים שהנרשם ימלא שאלון או להוסיף שדות מותאמים אישית כמו מספר טלפון, עיר, תפקיד וכו’.
שימושי גם כאשר רוצים לעדכן אוטומטית פרטים במערכת לפי הזנת טופס.
נשתמש בקוד הבא
add_action('elementor_pro/forms/new_record', function($record, $handler) {
$form_name = $record->get_form_settings('form_name');
if ('update_user_form' !== $form_name) {
return;
}
// קבלת הנתונים מהטופס
$raw_fields = $record->get('fields');
$fields = [];
foreach ($raw_fields as $id => $field) {
$fields[$id] = $field['value'];
}
$email = sanitize_email($fields['email']);
$user = get_user_by('email', $email);
if (!$user) {
return; // משתמש לא נמצא
}
// עדכון פרטי המשתמש
$user_id = $user->ID;
if (isset($fields['phone'])) {
update_user_meta($user_id, 'phone_number', sanitize_text_field($fields['phone']));
}
if (isset($fields['address'])) {
update_user_meta($user_id, 'user_address', sanitize_text_field($fields['address']));
}
// אפשר לעדכן גם את שם המשתמש או הפרופיל שלו
wp_update_user(array('ID' => $user_id, 'display_name' => $fields['full_name']));
}, 10, 2);
את הקוד יש למקם בקובץ functions.php
של ערכת-הבן (Child Theme) שלכם, או להוסיף כ”Code Snippet” דרך תוסף ייעודי, כדי שיטען באתר. כך נראה הקוד:
מניעת שליחה כפולה של טופס אלמנטור
לפעמים משתמשים לוחצים שוב ושוב על כפתור השליחה בטופס ויוצרים שליחות כפולות
הקוד הבא לאחר לחיצה על כפתור השליחה הופך את הכפתור ל”כבוי” (disabled) ומציג טקסט “שולח…” עד לסיום השליחה
ולידציה לשדה טלפון ישראלי (נייד + נייח) בטופס אלמנטור
// אימות מספר טלפון בצד השרת עבור טפסים של אלמנטור
add_action('elementor_pro/forms/validation/tel', function ($field, $record, $ajax_handler) {
if ($field['id'] === 'phone' || $field['id'] === 'טלפון') { // בדוק ID של השדה
$phone = sanitize_text_field($field['value']);
$cleaned_phone = preg_replace('/[^\d+]/', '', $phone); // מסיר תווים לא מספריים
// ולידציה למספרים ניידים ונייחים בישראל
if (!preg_match('/^(05[0-9]{8}|0[2-9][0-9]{7}|\+972[2-9][0-9]{7}|\+9725[0-9]{8})$/', $cleaned_phone)) {
$ajax_handler->add_error($field['id'], 'מספר הטלפון לא תקין. יש להזין מספר נייד או נייח בפורמט הישראלי.');
}
}
}, 10, 3);
// הוספת JavaScript לאימות בצד הלקוח, כולל תמיכה בטפסים בתוך פופאפ של אלמנטור
add_action('wp_footer', function () {
?>
ולידציה לשדה טלפון ישראלי נייד בטופס אלמנטור
// אימות מספר טלפון נייד בלבד בצד השרת עבור טפסים של אלמנטור
add_action('elementor_pro/forms/validation/tel', function ($field, $record, $ajax_handler) {
if ($field['id'] === 'phone' || $field['id'] === 'טלפון') { // בדוק ID של השדה
$phone = sanitize_text_field($field['value']);
$cleaned_phone = preg_replace('/[^\d+]/', '', $phone); // מסיר תווים לא מספריים
// ולידציה למספרי נייד בלבד בישראל
if (!preg_match('/^(05[0-9]{8}|\+9725[0-9]{8})$/', $cleaned_phone)) {
$ajax_handler->add_error($field['id'], 'יש להזין מספר טלפון נייד תקין בפורמט הישראלי.');
}
}
}, 10, 3);
// הוספת JavaScript לאימות בצד הלקוח, כולל תמיכה בטפסים בתוך פופאפ של אלמנטור
add_action('wp_footer', function () {
?>
בעמוד הזה https://multi-plugin.com/validation-phone-field-in-elementor-woocommerce/ תמצאו קוד php רזה ופשוט שיוודא שהמספר תואם לתבנית של מספרים ניידים או נייחים בישראל וימנע הגשות לא תקינות גם בטופס אלמנטור וגם בעמוד תשלום ווקומרס.
או לחלופין תוכלו להשתמש בקוד js שהמשתמשים יוכלו לראות חיווי מיידי בעת הזנת מספר הטלפון.
קונפטי לרקע העמוד לאחר שליחת טופס אלמנטור
בסעיף 3 בקישור הזה https://multi-plugin.com/confetti_background/ תמצאו קונפטי לרקע העמוד שמופעל אוטומטי לאחר שליחת הטופס
חסימת ספאם בטופס אלמנטור
אלמנטור מציעה לחסימת ספאם בטפסים התממשקות מובנית עם recaptcha של google וכן אפשרות למלכודת דבש.
פעמים רבות זה לא מספיק ויש צורך בטיפול שורשי יותר וכן חסימה של הרשמה והתחברות בטופס ההרשמה של האתר ותגובות לפוסטים במאמר הזה איך למנוע ספאם באתר וורדפרס? תמצאו מדריך מפורט וקל ליישום כדי למנוע ספאם באתר שלכם