EDD Recurring Payments & Discounts: Proposal

Pricing a premium plugin is hard. I’ve written publicly about the multiple pricing options for Sprout Invoices and after this weekend at WordCamp LAX talking to a lot of great people, I’ve already concluded improvements to streamline and simplify purchasing are needed. However, the pricing structure won’t change anytime soon, even if EDD discount codes don’t like it.

For the upcoming WordCamp and WPAPPStore promotions I need to apply a percentage discount to Sprout Invoices. Even though I could easily create a Discount with EDD the discount didn’t work as expected. The discount instead of applying to the initial fee (aka sign-up fee + price) it was applied only to the price, which is a major problem for me…

Here are some details…

  • Easy Digital Downloads applies discounts is to the download’s price.
  • Recurring Payments uses fees to apply the “sign up fee” to the download’s total price during checkout.
  • After the discount is applied at checkout it only factors the download’s price, not the total price with the fees applied.
  • The recurring rate is the price.

Do you see the problem? There are a few:

  1. A discount could cause the price of the download to be free, even if it has a recurring fee and instead of charging the customer they’re instead given the download without a recurring payment profile. 1
  2. …[I’ll remember at some point]…
  3. There’s no way to apply a discount to the initial price, instead it’s applied to the recurring fee instead.

That last “problem” is a big one for me. Since I don’t want to allow for a 25% discount for future subscriptions. Instead I need the customer to get their discount today and pay full price on the next term.

I thought I had this worked out after filtering the paypal subscription arguments 2 but it never worked, thankfully to EDD 2.0 changing how fees are calculated I noticed I still had the same problem–discounts were being applied to the recurring rate as well as the initial price.

I’d prefer EDD change how Recurring Payments approaches prices and terms but I understand that backwards compatibility is important, even if the fundamentals are wrong IMHO. When we did recurring fees for GBS the price was what the customer paid today; then there was an option for the term, duration term, and price. That way discounts can be applied to that full initial price without issue.


  1. I forgot where the check is but IIRC EDD is checking the subtotal instead of the total of the cart before deciding the purchase is free.
  2. Don’t use the method linked to filtering the paypal args, it won’t work. Instead read the whole post and use the other code above.