Lee Willis

Sort variations by price in Easy Digital Downloads


A discussion with my two children about pocket money gave me a real life reminder about the concept of anchoring.

Since my new WordPress plugin store has only recently gone live, and I’m still firmly in the tinkering / tweaking / post go-live phase I thought I’d a bit of experimenting with anchoring in the context of licence pricing.

I currently sell three different licence options, the options look like this:


I wondered if anchoring might affect people’s perception of value both in terms of overall conversion, and/or upsell from single licence purchases to multi-site licences. So I figured I’d swap the variations around – showing the most expensive option first, and pre-selecting it. In a future experiment I’ll also probably experiment with pre-selecting the middle-price option, or the cheapest while maintaining the order.

My new store uses the Easy Digital Downloads plugin, and fortunately it’s full of handy hooks and filters that let you change default behaviour. So ┬áhere’s a short snippet that you can drop in your theme’s functions.php, or a standalone plugin. It will order your variations by price, highest price first.

 * Custom usort() callback that sorts on the "amount" within the array principally, falling back to "name" if required.
 * @param  array  $a  The first value to compare.
 * @param  array  $b  The first value to compare.
 * @return int        -1 if $a should be sorted before $b, 1 otherwise.
function pblw_edd_purchase_variable_prices_sort( $a, $b ) {
        if ( $a['amount'] == $b['amount'] ) {
                return $a['name'] > $b['name'] ? -1 : 1;
        return $a['amount'] > $b['amount'] ? -1 : 1;

 * Sort the variations so that the most expensive is presented first.
 * @param  array  $prices       Array of variations available for purchase.
 * @param  int    $download_id  The download that the variations belong to.
 * @return array                The modified list of variations, sorted on price descending.
function pblw_edd_purchase_variable_prices( $prices, $download_id ) {
        usort( $prices, 'pblw_edd_purchase_variable_prices_sort' );
        return $prices;
add_filter( 'edd_purchase_variable_prices', 'pblw_edd_purchase_variable_prices', 10, 2 );

The end result looks like this:


I don’t expect that I’ll be able to generate any hugely statistically significant data from this experiment – but I’ll try and revisit it in a month or two and let you know how I get on!

  1. Moving to EDD
  2. Moving to EDD – Qualification & planning
  3. To sell direct, or not?
  4. Designing the plugin store
  5. Scope
  6. Now live on EDD
  7. Sort variations by price in Easy Digital Downloads


Leave a Reply

Required fields are marked *.