אם אתם בונים חנויות עם WooCommerce, יש סיכוי טוב שאתם כבר משתמשים בתוסף Discount Rules for WooCommerce. זה התוסף הזה שכל אחד מתקין כשהוא רוצה לבנות מערכת מבצעים קצת יותר חכמה — לפי כמות, לפי אחוז, לפי קבוצות משתמשים, לפי כל דבר בערך.
אבל אז מגיע השלב שבו אתם רוצים להציג עמוד שמרכז את כל המבצעים באתר. אתם נכנסים לדף חדש, שמים את השורטקוד שהתוסף נותן, מצפים לראות גריד יפה של מוצרים… ואז מגלים שזה לא בדיוק עובד.
העמוד נראה שונה מהשאר. הכפתורים לא באותו עיצוב. אין שליטה על הסידור. לפעמים זה שובר את העימוד באלמנטור. ואם אתם עובדים עם JetEngine או תבניות מותאמות אישית – בכלל מתחיל הבלאגן.

במקום להשתגע עם CSS ולעצב מחדש את מה שהתוסף מציג עם השורט קוד, יש פתרון הרבה יותר פשוט: פשוט לתת תגית אוטומטית לכל מוצר שיש עליו הנחה.
כלומר, ברגע שמופעל מבצע על מוצר כלשהו – הוא מקבל תגית בשם megasales. וכשהמבצע יורד – התגית מוסרת. אתם לא צריכים לעשות כלום ידנית. ברגע שיש תגית – פשוט בונים עמוד רגיל של מוצרים שמסנן לפי התגית הזו, והופ — יש לכם עמוד מבצעים שנראה בדיוק כמו כל שאר עמודי החנות באתר.
אותו גריד, אותו עיצוב, אותו פלואו.
הקוד הבא עושה בדיוק את זה: הוא יוצר תגית, עובר על כל המוצרים באתר, בודק האם מופעל עליהם מבצע, מוסיף או מסיר את התגית בהתאם, מריץ את זה אוטומטית כל שבועיים, וגם מוסיף כפתור בלוח הבקרה כדי שתוכלו לעדכן את זה בלחיצה כשאתם רוצים.
הקוד:
/**
* Credit: https://dgtool.co.il/
*/
function elitzur_update_discounted_products_tags($product_id = null) {
$sale_tag_slug = 'megasales';
$sale_tag_name = 'מבצעי ענק';
$sale_tag = get_term_by('slug', $sale_tag_slug, 'product_tag');
if (!$sale_tag) {
$sale_tag = wp_insert_term($sale_tag_name, 'product_tag', ['slug' => $sale_tag_slug]);
}
$sale_tag_id = is_object($sale_tag) ? $sale_tag->term_id : $sale_tag['term_id'];
$product_ids = [];
if ($product_id) {
$product_ids[] = $product_id;
} else {
$args = [
'post_type' => 'product',
'posts_per_page' => -1,
'post_status' => 'publish',
'fields' => 'ids',
];
$product_ids = get_posts($args);
}
foreach ($product_ids as $pid) {
$product = wc_get_product($pid);
if ($product && ($product->is_type('simple') || $product->is_type('variable'))) {
$discount_details = apply_filters('advanced_woo_discount_rules_get_product_discount_details', false, $product);
if (!empty($discount_details)) {
wp_set_object_terms($pid, $sale_tag_id, 'product_tag', true);
} else {
$current_tags = wp_get_post_terms($pid, 'product_tag', ['fields' => 'ids']);
if (in_array($sale_tag_id, $current_tags)) {
$new_tags = array_diff($current_tags, [$sale_tag_id]);
wp_set_object_terms($pid, $new_tags, 'product_tag', false);
}
}
}
}
}
add_action('save_post_product', function($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (!current_user_can('edit_post', $post_id)) return;
elitzur_update_discounted_products_tags($post_id);
});
add_action('init', function() {
if (!wp_next_scheduled('elitzur_update_discounted_products_cron')) {
wp_schedule_event(time(), 'elitzur_biweekly', 'elitzur_update_discounted_products_cron');
}
});
add_filter('cron_schedules', function($schedules) {
$schedules['elitzur_biweekly'] = [
'interval' => 60 * 60 * 24 * 14,
'display' => __('Once every 2 weeks')
];
return $schedules;
});
add_action('elitzur_update_discounted_products_cron', function() {
elitzur_update_discounted_products_tags();
});
add_action('admin_bar_menu', function($wp_admin_bar) {
if (!current_user_can('manage_options')) return;
// שימוש בעמוד הנוכחי במקום home_url
$current_url = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$args = [
'id' => 'update_sale_labels',
'title' => 'עדכון מבצעי MegaSale',
'href' => add_query_arg('elitzur_force_update', '1', $current_url),
'meta' => [
'title' => 'לחץ לעדכון התגיות למוצרים במבצע',
'class' => 'update-sale-labels-button',
]
];
$wp_admin_bar->add_node($args);
}, 999);
add_action('init', function() {
if (isset($_GET['elitzur_force_update']) && current_user_can('manage_options')) {
elitzur_update_discounted_products_tags();
// הסרת הפרמטר מה-URL ו-redirect לעמוד הנוכחי
$current_url = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$clean_url = remove_query_arg('elitzur_force_update', $current_url);
wp_redirect($clean_url);
exit;
}
});מי שלא אוהב לגעת בקבצים של התבנית – אפשר להדביק את הקוד הזה בתוסף כמו Code Snippets. פשוט מתקינים, מוסיפים קטע קוד חדש, מדביקים, שומרים וזהו. הקוד רץ לבד, בלי לגעת בקבצים של התבנית.
ומי שכן רגיל לערוך את functions.php – אפשר להדביק את זה בסוף הקובץ של תבנית הבת.
בסופו של דבר, במקום עמוד שונה ולא מותאם עם שורטקוד, יש לכם עמוד רגיל לגמרי שנטען מהר, מעוצב כמו כל החנות, ואפשר גם לשלב אותו ב־Elementor או JetEngine בלי בעיה.
וזה בדיוק איך שצריך לבנות חנות — בלי קיצורי דרך עקומים.
