Building WordPress Admin Pages That Don’t Break Later
Got a call from a client last week. They’ve got a WooCommerce extension that’s starting to get popular, but its settings page was buried under…
Got a call from a client last week. They’ve got a WooCommerce extension that’s starting to get popular, but its settings page was buried under…
Got a call from a long-time client last week. Absolute panic. They’d just run a routine batch of plugin updates, and suddenly their shipping calculator…
I got a call from a client running a decent-sized WooCommerce shop. They were in a panic. Their main shop page, which should have been…
Had a client call last week. They’ve got this huge, old WooCommerce plugin that’s been passed through three different dev teams. A new junior dev…
A junior dev on my team looked crushed. “They rejected my talk,” he said, staring at his laptop. He’d just gotten the canned ‘thanks but…
Got a call from a client. Total panic. They’d just finished a flash sale for their WooCommerce store, and the star of the show, a…
A client’s site was crawling at 5-7 seconds a page. The cause wasn’t a slow query but an uncached external API call from a plugin, which I tracked down with Query Monitor and fixed with a transient.
A legacy WooCommerce plugin had get_option and update_option calls scattered everywhere, with clashing prefixes resetting settings. The fix was one wrapper class that owns the options table and adds the prefix for you.
A client wanted a shortcode to highlight reader comments, but the inherited code crammed all the HTML into the shortcode function. Moving it into a dedicated generator class and a separate template file keeps the markup out of the PHP.
A custom events plugin where every class built its own dependencies was impossible to test or change. A small DI container built from closures gave one place to wire the objects together, without pulling in a framework.