Lee Willis

December 4, 2015
by Lee
1 Comment

Festive Wapuus

The latest version (2.4) of Wapuuvatar includes some lovely new Wapuus, including an evil Wapuu, Swedish Wapuu, Swiss Wapuu and Edu-Wapuu

It also features a festive Wapuu. As it’s starting to feel a bit like Christmas, it also includes a handy little filter that can be used to modify the Wapuu that is picked for a particular user. That lets you come up with fun things like festive_wapuu_for_everyone – a handy little snippet that will swap all of your Wapuuvatars for festive Wapuus during December ūüôā

function festive_wapuu_for_everyone( $wapuu, $id_or_email, $hash ) {
        if (date('n') == 12) {
                return 'wapmas-wapuu';
        } else {
                return $wapuu;
add_filter( 'wapuuvatar_chosen_wapuu', 'festive_wapuu_for_everyone', 10, 3 );

November 17, 2015
by Lee


Everyone needs a fun project every now and then, something that’s not serious, doesn’t have deadlines, or fixed set of requirements. Something that you can just play with.

I first came across Wapuu at WordCamp London, where Scott Evans had designed an awesome Punk Wapuu which covered posters, stickers Рand even scarves! (You can see some of the artwork here: https://london.wordcamp.org/2015/). It turns out that the Wapuu character was original developed by the Japanese WordPress community, released under the GPL, and has since been modified by many people for many different events / purposes.

Every better – they’re maintaining an archive of publicly release Wapuu interpretations.

Coincidence struck when I was:

a) Looking for a just-for-fun project to soothe my soul

b) Stumbled upon a tweet by @NickHamze


Well, I couldn’t resist – the timing seemed just right ūüôā

So if you want your WordPress avatars to be cute Wapuus in various poses – the wait is over – check out Wapuuvatar on GitHub – or download it from WordPress.org.

by Lee Willis

Uses Wapuus from the Wapuu archive as your site avatars.


  • Current version: 3.0.3
  • Rating: 100(6 ratings)
  • Downloaded 5,375 times

Use Wapuus for user avatars in WordPress
1 forks.
8 stars.
0 open issues.

Recent commits:

March 22, 2015
by Lee

WP-CLI import and export for Say What?

I’ve been at WordCamp London for the last two days (An excellent event, you should definitely consider it if you’re into WordPress and are in – or can get to – the UK). There were a fair few talks about making the admin area of WordPress better¬†by customising according to the site architecture.

This is something I’ve always been an advocate of – particular on sites that go beyond simple posts and pages. One of my plugins provides some of the tools that can help with this. The¬†“Say What?” string replacement plugin for WordPress¬†allows you to override strings from WordPress core and/or plugins that you’re using so you can personalise the phrases that are used to your particular use case.

I took the opportunity to make some small updates to the plugin over the last few days. Particularly I’ve extended the plugin to have support for WP-CLI. This allows you to import and export string replacements – particularly useful if you have a standard set (or sets) of replacements that you use on sites you build. You can also use it to get a list of all replacements you currently have set up on your site.

Generating a list of replacements

$ wp say-what list
| string_id | orig_string | domain | replacement_string | context |
| 3         | Tools       |        | Lee's tools        |         |
| 9         | Dashboard   |        | The dashboard      |         |

Exporting your replacements

This will ‘export’ all of your replacements in CSV format to the file /tmp/my-replacements.csv. This file is in the same format you need for importing back into the site, or into another site.

$ wp say-what export --format=csv > /tmp/my-replacements.csv

Updating replacements

Sometimes you might want to export a set of replacements, edit them, and then re-import. You can do this with the ‘update’ command – this will update any items with a string_id provided, or insert any items without a string ID. The following command will read in the file /tmp/my-replacements-amended.csv and update the database.

$ wp say-what update /tmp/my-replacements-amended.csv

Importing replacements

If you just want to add the replacements in a file to the database, you can use the ‘import’ command. This will insert each item in the file as a new item in the database.

$ wp say-what import /tmp/my-replacements-new.csv

Trying it out?

You can grab the plugin from WordPress.org – or check it out on GitHub – thanks to WordCamp London for the inspiration!

October 30, 2014
by Lee

Default Lowest Shipping Choice on WP e-Commerce

The WP e-Commerce plugin no-longer defaults the cheapest shipping option at checkout. This can be great if you want customers to consider other shipping options that may be beneficial for them (For example quicker delivery, insurance etc.).

If you do want it to default to the cheapest option, try this simple plugin:

WP e-Commerce Default Lowest Shipping Choice
by Lee Willis

A straightforward plugin that makes WP e-Commerce checkout default to the lowest available rate when first populating shipping choices.

The plugin’s available for forking and contribution over on GitHub


  • Current version: 1.2
  • Downloaded 764 times

October 28, 2014
by Lee

Change order of payment gateways in Easy Digital Downloads

Easy Digital Downloads lets you enable multiple payment gateways to give customers a¬†choice about how they want to pay. The core plugin also lets you choose a default option, but it doesn’t let you choose the order that options are presented at checkout. That can lead to odd UX where the default selected option appears second, or third in the list:

Screenshot from 2014-10-28 22:10:46

Fortunately, it’s pretty easy to change this order – simply paste the following function into your theme’s functions.php file, or use a functionality plugin. Just change the $gateway_order array to the gateways you have enabled, in the order you want them, and you’re good to go.

function lw_edd_enabled_payment_gateways($gateways) {
	$gateway_order = array(
	$new_gateways = array();
	foreach ( $gateway_order as $gateway ) {
		if ( ! empty( $gateways[$gateway] ) ) {
			$new_gateways[$gateway] = $gateways[$gateway];
	return $new_gateways;

Here’s what our revised default checkout looks like – much neater.
Screenshot from 2014-10-28 22:15:48

April 2, 2014
by Lee


One of my colleagues made a comment the other day.

You must get a lot of karma for all of these patches you send…

I found this quite interesting. I’ve always been a fan (In a non-religious sense) of the concept of karma.¬†Google helpfully provided this definition:

The sum of a person’s actions in this and previous states of existence, viewed as deciding their fate in future existences.

For me – I’ve always believed that if you have good intentions, and treat people well, then that will be rewarded.

My father-in-law has studied behaviour extensively, and I’ve had many a conversation with him about psychology, and behaviours. I recall a long conversation about altruism (doing good things for others motivated not by personal gain), and while I’m sure many people see Open Source in general as altruistic. For me though, that’s not the case.

So, what about me and Open Source. A brief history:

  • I first encountered Open Source in University. One of my classmates was a Debian Maintainer and introduced me to it. I was immediately in love with the concept. Not because it was free (as in $0) – but because it was open. I could change, extend and fix it if I needed to.
  • I got involved in WordPress when I built a site for my wife.
  • Then I built a second site for a family member. Encountering a number of bugs in the plugins I was using, I got involved in patching them. I didn’t want to have the hassle of continually applying those fixes – so I submitted them back to the project.¬†Since this wasn’t a paid project, this also seemed like a good way of giving back (good karma – right?), so I made sure to make any fixes I made be useful in the general sense rather than just for me, and off they went.
  • I also spent time in the support forums identifying other issues and trying to provide fixes for them. After all I knew I would be called upon if any problems happened, so it made sense to me to head them off at the pass.
  • Shortly afterwards I started selling WordPress plugins. I’ve always tried to make sure that some of the time I spend “doing that” (it’s not my day-job) is spent giving back to free projects, such as plugins I’m extending, or WordPress core itself.

So, I love Open Source because it’s open and I can change, bend it, fix it, improve it. That’s empowering.

I contribute to Open Source because it makes my life easier to do that than the alternative. That’s hardly the “altruistic” angle that people often spout about Open Source (Geeks building stuff for free), but it’s honest.

April 1, 2014
by Lee

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

March 27, 2014
by Lee

Now live on EDD

I’ve now been live on Easy Digital Downloads for a little under 48hours.

I ¬†compromised (temporarily) on some of my original goals, and there’s definitely a post go-live list, but I’m pretty happy with it. You can see the new store at plugins.leewillis.co.uk – all comments welcome ūüôā

  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

March 26, 2014
by Lee


Scope is an interesting thing.

Scope discussions are unavoidable.

If you’re building something for yourself, that leads to some interesting situations – you’re torn, and because it’s an argument with yourself there’s never going to be a clear winner.

So – I thought I’d write up some thoughts on my recent store rebuild as much to reflect on as document the decisions I’d made along the way. When I set out I had some clear objectives of what I wanted to achieve:

  1. Move to a sales solution that was focussed on digital products
  2. Re-design the store to take into account some lessons learned
  3. Less custom functionality – more off-the-shelf
  4. Re-work product copy – make it easier for customers to understand plugin functionality and how it can help them
  5. Liven up product images – make it more obvious what is for sale

The honest answer is that I’ve hit 3 and 2 halves of my objectives.

So – my new plugin store is now live – what did I achieve?

Well, [1] was a no brainer, and were pretty much achieved before I started. I decided to move to Easy Digital Downloads¬†as the base software for my store.¬†[3] also got closed off pretty quickly with with the addition of EDD’s Software Licensing¬†extension, reviews add-on and Stripe gateway.

Item [2] was also reasonably straightforward. I went for an off-the-shelf theme (Humbleshop), and after a couple of aborted colour schemes РI settled on the Rocket colour scheme to provide the feel for the theme.

The last two items are where I compromised.

People often talk about not compromising, but I’ve always been more of a pragmatist, than an idealist. I also think that experience has made me a reasonable judge of what a reasonable trade-off point is [your opinion may vary!].

Before we go any further though, I’d like to note that this isn’t about being lazy or impatient – this is about scope, and managing it. It’s about delivering, and iterating. So here’s what happened…

For [4] I’d intending reviewing all of my product and support copy – with the help of Hemingway App. For [5] I was undecided on whether I was going to commission artwork or some other solution.

Aware that if I was going to commission artwork it would have a leadtime this was the item I looked at first. I had a few chats with some friends who’ve worked with designers on icon / logo design before and it quickly became clear that for the volume of artwork I needed, the costs were going to put me significantly out of budget.

My previous site didn’t have any product icons at all, only screenshots. So my compromise was to produce icon / logo based product images that represented the plugins on offer. You can see the results here. I’m classing this as a half-achieved objective since it’s definitely an improvement on the previous version – but I appreciate it could be a lot better if I had the money, or the design skills to spend on it.

Pragmatism – see?

So – we’re left with [4]. I started this, and re-worked several pages of product copy, but I’ll confess I shifted focus, and just left some of the rest as-is. The reason was that I identified other items that needed doing that I viewed as more important. Rather than extend the project, I decided to just swap those activities. The current product copy isn’t “broken”. It sells. I’m sure it could sell more, but I’m not losing anything by leaving it as is.

The activities I swapped it with either prevented the experience being broken , or added value. So here’s what I did instead:

  • I decided to migrate purchase history, rather than just licences. Pippin Williamson flagged that not migrating purchases for existing licences might cause issues for renewals / not-yet registered licences. My customers don’t deserve that.
  • I decided to work on creating some widgets I could use around my site to make access to information clearer and more discoverable.
  • I decided to work on a way of better structuring my support materials.¬†This improves the product pages on day 1 – but also gives me a better foundation for when I do do the content reviews.

Overall – I’m happy with the result. Those “compromise” items haven’t been forgotten about or dropped – they’ve just been moved into a post go-live list.

Of course, I’ll update this series as it happens – feel free to remind me if you don’t see anything more ūüôā

  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

February 25, 2014
by Lee

Designing the plugin store

As I hinted at the end of my last post, probably the final step of pre-planning my new plugin store was to think about theme choice for the new store. I’m no designer myself, so a self-build theme is mostly out of the question. Neither am I at the level where I’d consider a bespoke theme development to be required, which leaves me with customising an off-the-shelf theme – an activity I’m perfectly comfortable with.

The problem is…

Most (e-Commerce) themes is that they’re designed to show off the products in the best light possible, and as a result they tend to be image heavy. This is an approach that really doesn’t work well if you’re selling code. Currently my store relies on screenshots on products.

While I think this is really useful in terms of people understanding the functionality available in the plugin, it’s not great for people navigating the store, or “selling” people on the product. So – I’ve decided I need product “icons” of some form.

I’ve not yet decided what they’ll be, or how complex they’ll be. My design skills might stretch that far, or I may be looking for an illustrator who can help me out – but I’m not yet convinced that’s what will be required.¬†

Choosing a theme

As part of my original research on this project, I’d looked closely at WP e-Commerce, and WooCommerce – both of which have a broad selection of lovely looking themes. Discounting the really image heavy themes there’s still a great deal to choose from.

Since I settled on Easy Digital Downloads, and because it’s not a plugin I’ve spent a lot of time theming, I really wanted something that worked out-of-the box. Unfortunately, while there are a couple of nice themes, there’s not really as broad a choice as there is with other plugins – I think this is the only area I’d score the plugin down in.¬†

I settled on a shortlist though:

Forelight is great, and would be fantastic for someone selling digital art or similar, but I felt it relied too much on imagery. Quota and Shop Front also got discounted as great as they are, they were a bit too plain. I thought I’d have too much design to do to make them feel polished. In the end, I settled on HumbleShop (Be careful, there’s a normal, and an EDD version of the theme available on the net – make sure you grab the right one).

Aside from throwing a few warnings during installation, I’m pretty happy with this choice so far. As you’d expect from someone who tinkers a lot, I expect I’m going to be throwing a few improvement patches the authors way – we’ll see how that goes. However – first impressions are that it’s going to deliver the sort of experience I’m looking for.

Styling it up

Of course, I won’t be leaving HumbleShop as-is. I’ve created a child theme already and have started playing around with styling and colour schemes. I’ve been browsing colourlovers.com¬†for colourscheme inspiration. Again I had a shortlist (Higher, Wordofmouse & Worf, Winter Olympics, and Breakfast Berries), but after a discussion with some trusted friends – I settled on Wordofmouse & Worf:

Color by COLOURlovers

Actually – when I say “settled” on – that might not be entirely true – after applying it to HumbleShop, I’m not quite sure it works, so it may be back to the drawing board. We’ll see…

  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