It’s amazing how some customers’ behavior can highlight innovative ways of saving money.
It never occurred to me until I started selling software, and managing annual software licenses, that there’s a pretty simple way to save money when trying to renew software licenses, without a coupon. Many businesses pro-rate license upgrades, and prorate them by date, such that the closer you come to expiration, the cheaper an upgrade gets. So a frugal move to make is to wait until just days before your software license expires, then upgrade to the next level up… for a tiny fraction of what it would cost to renew the lesser license currently held. VoilĂ – we now have better access for another year, for cheaper than a straight renewal!
While this is pretty cool for the customer, this is a big problem for software sellers that causes significant loss of income. In particular it’s a weakness for some Easy Digital Downloads (EDD) admins using EDD’s Software Licensing extension. I wrote a PHP code snippet for use with EDD Software Licensing. It locks out prorated upgrades after a certain number of months of license ownership (3 months):
/**
* Customers lose prorate upgrades if less than 9 months left on license
*
* @param float|int $prorated Calculated prorated price
* @param int $license_id ID of license being upgraded
* @param float|int $old_price Price of the original license being upgraded
* @param float|int $new_price Price of the new license level
* @return float|int
*/
function my_get_pro_rated_upgrade_cost( $prorated, $license_id, $old_price, $new_price ) {
if ( ! class_exists( 'EDD_Software_Licensing' ) ) {
require_once WP_PLUGIN_DIR . '/edd-software-licensing/includes/classes/class-edd-software-licensing.php';
}
// Get license object from license ID
$license = EDD_Software_Licensing()->get_license( $license_id );
if ( 'lifetime' === $license->expiration ) {
return $prorated; // why lifetime licenses should get caught in this hook is beyond me
}
// 23670000 is the number of seconds in 9 months, change ad lib
if ( ! is_object( $license ) || $license->is_expired() || ( ! $license->is_expired() && ( (int) $license->expiration - time() < 23670000 ) ) ) {
return $new_price;
}
return $prorated;
}
add_filter( 'edd_sl_get_pro_rated_upgrade_cost', 'my_get_pro_rated_upgrade_cost', 11, 4 );
Should a customer decide they need to upgrade the software, they need to do it soon after purchase, not as a way to obtain a deep discount. In the case of this EDD add-on snippet below, they need to upgrade within 3 months, otherwise prorating is not offered. If they try to upgrade an expired license, prorating is not offered.
I hope this helps you. If it does please reach out to say hi!