Thoughts on
building for the web
WordPress development, plugin engineering, Laravel, and the occasional reflection on shipping software that lasts.

How I Use Claude for WordPress Plugin Development (Real Workflow, Not Hype)
I’ve been building WordPress plugins for over six years. For the last year or so, Claude has been part of my daily workflow. Not in the “AI does everything” way you see in Twitter threads — more like having a senior developer available at any hour who’s read every piece of WordPress documentation and has […]

WooCommerce Hook Reference for Developers: Actions & Filters You Actually Use
WooCommerce has hundreds of hooks. The official documentation lists them all, which sounds helpful until you’re staring at a wall of hook names trying to figure out which one fires where you actually need it. After building WooCommerce extensions for a few years, I keep coming back to the same couple dozen. This is a […]
WordPress Custom Post Types & Taxonomies: Complete Developer Guide
Custom post types are how you tell WordPress that your data isn’t a blog post. Products, events, team members, properties, courses — any content with its own structure and its own admin screen needs a custom post type. The same goes for taxonomies: if you need to categorise that content in a way that doesn’t […]
How to Build Your First Gutenberg Block (2026 — @wordpress/scripts Setup)
Block development has a reputation for being harder than it needs to be. The official docs are thorough but long, and it’s easy to get lost before writing a single line of JavaScript. I’ve watched developers spend an entire afternoon trying to configure Webpack before giving up. This guide skips that problem entirely. The short […]

WordPress Plugin Security: Nonces, Sanitization, Escaping & Capability Checks
Most WordPress security problems don’t come from WordPress itself — they come from plugins. A form that saves data without checking who submitted it, an AJAX handler that trusts user input, an admin page that any logged-in user can access. These are the patterns that get sites compromised. This post covers the four security mechanisms […]

How to Use pre_get_posts to Modify WordPress Queries (Without query_posts)
If you’ve ever tried to change what posts appear on a category archive or search results page, you’ve probably run into query_posts(). And if you’ve read anything about it, you’ve probably been told not to use it. That advice is correct — but the reason matters. query_posts() replaces the main query mid-execution, which breaks pagination […]

WordPress Actions vs Filters: The Complete Guide with Real Examples
What Are WordPress Hooks? WordPress hooks are the backbone of every plugin and theme. They let you run your own code at specific points in WordPress’s execution cycle — without touching core files. There are two types: actions and filters. Understanding the difference is the single most important concept in WordPress plugin development. The short […]

WooCommerce Product Query with WP_Query: Filters, Meta, Taxonomy & Performance
WooCommerce stores product data using WordPress’s standard post system — products are the product post type, prices and stock levels live in post meta, and categories/tags are custom taxonomies. That means WP_Query can query products with full precision, and understanding the data structure unlocks filters you can’t get from WooCommerce’s own functions. This guide covers […]

The Complete WP_Query Guide: Every Argument, Real Examples & Performance Tips
What Is WP_Query? WP_Query is WordPress’s built-in class for querying the database and retrieving posts. Every page you visit on a WordPress site runs a query behind the scenes — WP_Query is what powers it. The difference is that you can instantiate your own version anywhere: in templates, shortcodes, widgets, REST API callbacks, and plugin […]