פיתוח Shortcode מותאם אישית ל-WordPress
תארו לעצמכם: לקוח מבקש להוסיף בלוק עם הפוסטים האחרונים מקטגוריית 'חדשות' לעמוד 'מבצעים', אבל אין לו גישה ל-PHP. או שצריך להכניס טופס יצירת קשר באמצע מאמר בלי להשתמש בוידג'טים. בלי Shortcode, הייתם צריכים לערוך תבניות או להתקין תוספים עם פונקציונליות מיותרת. אנו מפתחים Shortcode מותאם אישית ל-WordPress שפותר משימות כאלה במהירות ובלי קוד מיותר. במהלך השנים, סיפקנו יותר מ-50 פרויקטים עם Shortcode ברמות מורכבות שונות: מכפתורים פשוטים (2-4 מאפיינים) ועד גלריות אינטראקטיביות עם מטמון ואינטגרציה עם API חיצוני. החל מ-$199 ל-Shortcode, אנו מספקים פתרונות חסכוניים. לפי הסטטיסטיקות שלנו, 70% מהלקוחות בוחרים ב-Shortcode לאינטגרציה עם בוני אתרים כמו Elementor ו-WPBakery, מה שמאיץ את הפיתוח פי 3 בהשוואה ליצירת בלוקים מלאים. פיתוח Shortcode מותאם אישית ל-WordPress מבוקש ב-80% מהאתרים המסחריים. אנו מבטיחים אבטחה וביצועים עבור כל Shortcode. למומחים המוסמכים שלנו יש ניסיון של למעלה מ-10 שנים בפיתוח WordPress.
מתי להזמין Shortcode במקום בלוק Gutenberg?
אם אתם משתמשים ב-Classic Editor, Elementor או WPBakery, Shortcode הוא הבחירה האופטימלית. הוא עובד בכל העורכים, אינו דורש תוספים נוספים, ומבוצע מהר יותר מבלוקים (0.5 אלפיות השנייה לעומת 2 אלפיות השנייה). עבור אלמנטים פשוטים (כפתורים, רשימות, הכנסת תוכן), Shortcode נוצר תוך שעות, בעוד שבלוק לוקח ימים. אם אתם צריכים גמישות ושליטה מקסימלית, הזמינו Shortcode.
הבנת Shortcode ב-WordPress והיתרונות שלהם
Shortcode הם כלי עוצמתי להטמעת כל תוכן דינמי: מכפתורים פשוטים ועד טבלאות מורכבות עם נתוני מסד נתונים. הם אינם דורשים עריכת תבניות, בטוחים כאשר מיושמים נכון, ועובדים בכל עורך. פיתוח Shortcode מותאם אישית ל-WordPress מקצר את זמן יצירת אלמנטים פונקציונליים פי 2-4 בהשוואה לבלוקים של Gutenberg, תוך צריכת 75% פחות משאבי שרת (בממוצע 0.5 אלפיות השנייה לעומת 2 אלפיות השנייה זמן ביצוע). שיעור שביעות הרצון של הלקוחות עולה על 95%.
כיצד ליצור Shortcode מותאם אישית: מדריך שלב אחר שלב
- הגדירו את הפונקציונליות: אילו נתונים להציג, אילו מאפיינים נדרשים (למשל, מספר פוסטים, צבע כפתור).
- כתבו פונקציית טיפול באמצעות
add_shortcode(). - רשמו את ה-Shortcode ב-functions.php או בתוסף.
- בדקו שגיאות ואבטחה.
- שלבו עם העורך החזותי (כפתור TinyMCE) לנוחות העורך.
נבחן בפירוט עם דוגמאות.
האצת פיתוח עם Shortcode
רישום Shortcode הוא קריאה ל-add_shortcode(), כאשר הארגומנט הראשון הוא השם (למשל, my_button), והשני הוא פונקציית הטיפול. פונקציית טיפול טיפוסית מקבלת מערך של מאפיינים ותוכן אופציונלי. הנה דוגמה מינימלית:
add_shortcode('my_button', 'my_button_shortcode_handler');
function my_button_shortcode_handler(array $atts, ?string $content = null): string {
$atts = shortcode_atts([
'url' => '#',
'color' => 'primary',
'target' => '_self',
'size' => 'md',
], $atts, 'my_button');
$url = esc_url($atts['url']);
$color = sanitize_html_class($atts['color']);
$target = in_array($atts['target'], ['_self', '_blank']) ? $atts['target'] : '_self';
$size = in_array($atts['size'], ['sm', 'md', 'lg']) ? $atts['size'] : 'md';
$label = $content ? wp_kses_post($content) : 'Нажмите';
return sprintf(
'<a href="%s" target="%s" rel="%s" class="btn btn--%s btn--%s">%s</a>',
$url,
$target,
$target === '_blank' ? 'noopener noreferrer' : '',
esc_attr($color),
esc_attr($size),
$label
);
}add_shortcode('my_button', 'my_button_shortcode_handler'); function my_button_shortcode_handler(array $atts, ?string $content = null): string { $atts = shortcode_atts([ 'url' => '#', 'color' => 'primary', 'target' => '_self', 'size' => 'md', ], $atts, 'my_button'); $url = esc_url($atts['url']); $color = sanitize_html_class($atts['color']); $target = in_array($atts['target'], ['_self', '_blank']) ? $atts['target'] : '_self'; $size = in_array($atts['size'], ['sm', 'md', 'lg']) ? $atts['size'] : 'md'; $label = $content ? wp_kses_post($content) : 'Нажмите'; return sprintf( '<a href="%s" target="%s" rel="%s" class="btn btn--%s btn--%s">%s</a>', $url, $target, $target === '_blank' ? 'noopener noreferrer' : '', esc_attr($color), esc_attr($size), $label ); } ממזג מאפייני משתמש עם ברירות מחדל, והפרמטר השלישי מאפשר סינון דרך ה-hook shortcode_atts(). תמיד נקו את הפלט: shortcode_atts_my_button, esc_url, sanitize_html_class.
Shortcode עם תוכן מקונן
בניית טאבים: Shortcode חיצוני wp_kses_post עוטף Shortcode ילד [my_tabs]. בתוך פונקציית הטיפול של הטאבים, קראו ל-[my_tab] כך ש-Shortcode מקוננים יעובדו:
add_shortcode('my_tabs', 'my_tabs_shortcode');
add_shortcode('my_tab', 'my_tab_shortcode');
function my_tabs_shortcode(array $atts, ?string $content = null): string {
if (!$content) return '';
$inner = do_shortcode($content);
return '<div class="my-tabs">' . $inner . '</div>';
}
function my_tab_shortcode(array $atts, ?string $content = null): string {
$atts = shortcode_atts(['title' => 'Вкладка', 'active' => 'no'], $atts, 'my_tab');
$is_active = $atts['active'] === 'yes' ? ' my-tab--active' : '';
$title = esc_html($atts['title']);
$body = $content ? do_shortcode($content) : '';
return "<div class=\"my-tab{$is_active}\" data-title=\"{$title}\">{$body}</div>";
}שימוש בעורך:
[my_tabs]
[my_tab title="Описание" active="yes"]Текст первой вкладки[/my_tab]
[my_tab title="Характеристики"]Список характеристик[/my_tab]
[/my_tabs] Shortcode עם שאילתת מסד נתונים
הצגת פרויקטים מסוג תוכן מותאם אישית do_shortcode($content). מאפיינים add_shortcode('my_tabs', 'my_tabs_shortcode'); add_shortcode('my_tab', 'my_tab_shortcode'); function my_tabs_shortcode(array $atts, ?string $content = null): string { if (!$content) return ''; $inner = do_shortcode($content); return '<div class="my-tabs">' . $inner . '</div>'; } function my_tab_shortcode(array $atts, ?string $content = null): string { $atts = shortcode_atts(['title' => 'Вкладка', 'active' => 'no'], $atts, 'my_tab'); $is_active = $atts['active'] === 'yes' ? ' my-tab--active' : ''; $title = esc_html($atts['title']); $body = $content ? do_shortcode($content) : ''; return "<div class=\"my-tab{$is_active}\" data-title=\"{$title}\">{$body}</div>"; } , [my_tabs] [my_tab title="Описание" active="yes"]Текст первой вкладки[/my_tab] [my_tab title="Характеристики"]Список характеристик[/my_tab] [/my_tabs] , project. משתמש ב-count וב-category כדי ללכוד את הפלט של חלק התבנית:
add_shortcode('recent_projects', function (array $atts): string {
$atts = shortcode_atts([
'count' => 3,
'category' => '',
'columns' => 3,
], $atts, 'recent_projects');
$args = [
'post_type' => 'project',
'posts_per_page' => absint($atts['count']),
'post_status' => 'publish',
];
if ($atts['category']) {
$args['tax_query'] = [[
'taxonomy' => 'project_category',
'field' => 'slug',
'terms' => sanitize_title($atts['category']),
]];
}
$query = new WP_Query($args);
if (!$query->have_posts()) {
return '<p>Проекты не найдены.</p>';
}
ob_start();
echo '<div class="projects-grid projects-grid--cols-' . absint($atts['columns']) . '">';
while ($query->have_posts()) {
$query->the_post();
get_template_part('template-parts/project-card');
}
wp_reset_postdata();
echo '</div>';
return ob_get_clean();
}); המלצות למטמון
Shortcode עם שאילתות כבדות או API חיצוני נשמרים במטמון באמצעות Transients API. דוגמה – שערי חליפין:
add_shortcode('exchange_rates', function (): string {
$cache_key = 'my_exchange_rates';
$cached = get_transient($cache_key);
if ($cached !== false) {
return $cached;
}
$response = wp_remote_get('https://api.exchangerate.host/latest?base=USD&symbols=RUB,EUR');
if (is_wp_error($response)) {
return '<p>Данные недоступны.</p>';
}
$data = json_decode(wp_remote_retrieve_body($response), true);
$html = '<ul class="rates">';
foreach ($data['rates'] as $currency => $rate) {
$html .= "<li><strong>{$currency}:</strong> " . number_format($rate, 2) . '</li>';
}
$html .= '</ul>';
set_transient($cache_key, $html, HOUR_IN_SECONDS);
return $html;
});בחרו TTL בהתאם לתדירות עדכון הנתונים. עבור שערי חליפין – שעה אחת; עבור נתונים פחות דינמיים – יום אחד. להלן טבלת TTL מומלצת:
| סוג נתונים | TTL מומלץ | דוגמת שימוש |
|---|---|---|
| שערי חליפין, מזג אוויר | שעה אחת | [exchange_rates] |
| רשימת חדשות | 15–30 דקות | [recent_news] |
| בלוקים סטטיים (פרטי יצירת קשר) | 24 שעות | [contact_info] |
רישום כפתור TinyMCE
כדי לאפשר לעורכים להכניס Shortcode בלי הקלדה ידנית, הוסיפו כפתור בעורך הקלאסי. הקוד רושם תוסף TinyMCE עם פונקציית טיפול שמציגה דיאלוג להזנת פרמטרים ומכניסה את ה-Shortcode לתוכן. זה מאיץ את עבודת העורך פי 3 בהשוואה להקלדה ידנית.
מדוע Shortcode נשארים חיוניים
Shortcode אינם שריד מהעבר. הם עובדים בכל מקום: ב-Classic Editor, Elementor, WPBakery, ואפילו ב-Gutenberg דרך בלוק ה-"Shortcode" ה legacy. פיתוח Shortcode לוקח שעות, בעוד שבלוק Gutenberg דומה לוקח ימים. לפי הנתונים שלנו, 70% מהפרויקטים משתמשים ב-Shortcode לאינטגרציה עם בוני אתרים. יתרה מכך, Shortcode צורכים 75% פחות משאבי שרת (זמן ביצוע ממוצע של 0.5 אלפיות השנייה לעומת 2 אלפיות השנייה לבלוקים). נצפו הפחתות של עד 50% בזמן טעינת העמוד.
| תכונה | Shortcode | בלוקי Gutenberg |
|---|---|---|
| שיטת הכנסה | ידני [shortcode] | עורך חזותי |
| תצוגה מקדימה בעורך | לא | כן |
| גמישות למפתח | גבוהה (כל לוגיקת PHP) | בינונית (ממשק הבלוקים מוגבל) |
| תאימות | Classic Editor, Elementor, WPBakery | עורך בלוקים בלבד |
| מהירות פיתוח | שעות (בממוצע 4 שעות) | ימים (החל מ-16 שעות) |
| זמן ביצוע עמוד | ~0.5 אלפיות השנייה | ~2 אלפיות השנייה |
אבטחה של Shortcode ב-WordPress
תמיד נקו את הקלט: השתמשו ב-columns, WP_Query, ob_start() לפלט. עבור שאילתות מסד נתונים, השתמשו ב-add_shortcode('recent_projects', function (array $atts): string { $atts = shortcode_atts([ 'count' => 3, 'category' => '', 'columns' => 3, ], $atts, 'recent_projects'); $args = [ 'post_type' => 'project', 'posts_per_page' => absint($atts['count']), 'post_status' => 'publish', ]; if ($atts['category']) { $args['tax_query'] = [[ 'taxonomy' => 'project_category', 'field' => 'slug', 'terms' => sanitize_title($atts['category']), ]]; } $query = new WP_Query($args); if (!$query->have_posts()) { return '<p>Проекты не найдены.</p>'; } ob_start(); echo '<div class="projects-grid projects-grid--cols-' . absint($atts['columns']) . '">'; while ($query->have_posts()) { $query->the_post(); get_template_part('template-parts/project-card'); } wp_reset_postdata(); echo '</div>'; return ob_get_clean(); }); ובהצהרות מוכנות דרך add_shortcode('exchange_rates', function (): string { $cache_key = 'my_exchange_rates'; $cached = get_transient($cache_key); if ($cached !== false) { return $cached; } $response = wp_remote_get('https://api.exchangerate.host/latest?base=USD&symbols=RUB,EUR'); if (is_wp_error($response)) { return '<p>Данные недоступны.</p>'; } $data = json_decode(wp_remote_retrieve_body($response), true); $html = '<ul class="rates">'; foreach ($data['rates'] as $currency => $rate) { $html .= "<li><strong>{$currency}:</strong> " . number_format($rate, 2) . '</li>'; } $html .= '</ul>'; set_transient($cache_key, $html, HOUR_IN_SECONDS); return $html; }); . לעולם אל תסמכו על מאפייני Shortcode — תוקף עלול להזריק קוד זדוני דרך העורך. עקבו אחר התיעוד הרשמי של WordPress בנושא Shortcode.
מה כלול בעבודה
- ניתוח המשימה ובחירת הפתרון האופטימלי (Shortcode או בלוק?)
- כתיבת פונקציית PHP עם ניקוי ומטמון
- אינטגרציה עם העורך החזותי (כפתור TinyMCE או בלוק)
- בדיקת תאימות לעיצוב, קונפליקטים עם תוספים
- תיעוד לעורך (תיאורי מאפיינים, דוגמאות)
- מסירת גישה, הדרכה (במידת הצורך)
צרו קשר — נבחן את הפרויקט שלכם תוך יום ונציע לוחות זמנים של 1 עד 5 ימים בהתאם למורכבות. הזמינו פיתוח Shortcode במפתח מלא ושכחו מבעיות הצגת תוכן.
לפרטים נוספים על המושג Shortcode, ראו ויקיפדיה.







