Run a Double Points Promotion in WooCommerce (Holiday Multiplier)

A short, time-boxed bonus is one of the most reliable ways to lift conversion rates: for the two weeks before Christmas, every product earns double points. Once the window closes, the store reverts to its normal earning rate automatically. Loyalty Program for WooCommerce exposes the filter you need to do this in about ten lines of code.

How the Multiplier Stacks

Points are calculated per product through the wpgens_loyalty_product_points_calculated filter. The Ranks module hooks into the same filter at priority 10 to apply each member’s tier multiplier. By hooking at priority 20, your promotion multiplier runs after rank logic, so VIP and VVIP members keep their tier bonus and still get the holiday boost on top.

The Snippet

Edit the $start and $end dates to match your promotion. The filter does nothing outside the window, so you can leave the code in place year-round and only update dates when you launch a new campaign.

<?php
/**
 * Double points during a holiday promotion window.
 * Drop into wp-content/mu-plugins/ or your child theme functions.php.
 */
add_filter('wpgens_loyalty_product_points_calculated', 'wpgl_holiday_double_points', 20, 4);

function wpgl_holiday_double_points($points, $product, $price, $points_rate)
{
    $start = strtotime('2026-12-15 00:00:00');
    $end   = strtotime('2026-12-31 23:59:59');
    $now   = current_time('timestamp');

    if ($now < $start || $now > $end) {
        return $points;
    }

    // Multiply on top of whatever the plugin (and the rank multiplier) returned.
    return (float) $points * 2;
}

Running Multiple Promotions

If you run several promotions a year, replace the single $start / $end pair with an array of windows and walk through them. The same filter can return different multipliers for different periods, for example 2x for Black Friday and 1.5x for Mother’s Day.

<?php
add_filter('wpgens_loyalty_product_points_calculated', 'wpgl_seasonal_promos', 20, 4);

function wpgl_seasonal_promos($points, $product, $price, $points_rate)
{
    $promos = [
        ['start' => '2026-11-27 00:00:00', 'end' => '2026-11-30 23:59:59', 'multiplier' => 2],
        ['start' => '2026-12-15 00:00:00', 'end' => '2026-12-31 23:59:59', 'multiplier' => 2],
        ['start' => '2027-05-10 00:00:00', 'end' => '2027-05-11 23:59:59', 'multiplier' => 1.5],
    ];

    $now = current_time('timestamp');
    foreach ($promos as $promo) {
        if ($now >= strtotime($promo['start']) && $now <= strtotime($promo['end'])) {
            return (float) $points * $promo['multiplier'];
        }
    }
    return $points;
}

Where to Put This Snippet

Drop the snippet into a small site-specific plugin under wp-content/mu-plugins/ so it survives theme changes, or paste it into your child theme’s functions.php. Tell customers about the promotion: communicating the boost is what drives the lift, not the filter itself.

After deploying, place a test order during the active window and check that the points awarded on the order are double the usual amount. Place a second test order after the window ends to confirm the rate has reverted.

Browse our plugins

Lightweight WooCommerce plugins built for speed. No bloat, no frameworks -- just clean code that works.

View all plugins
Stay in the loop

Get notified when we launch new plugins. No spam, just product updates.