Headless WordPress With Next.js: Data, Caching and Previews
WordPress as the editor, Next.js as the front end: WPGraphQL, fetching with cache tags, webhooks on publish, draft previews, media, and where teams regret it.
Writing
74 write-ups from production, newest first. Each one is a problem hit on a real project and how it was diagnosed and fixed.
WordPress as the editor, Next.js as the front end: WPGraphQL, fetching with cache tags, webhooks on publish, draft previews, media, and where teams regret it.
How to scope a WordPress project so a fixed quote survives reality: discovery first, what the quote must state, the change process, and how to price risk.
The front end is fast, the admin takes eight seconds a page. Where admin time goes: autoloaded options, transients, cron on page load, dashboard widgets, fixes.
How WordPress generates, serves and lazy-loads images, where the defaults hurt Core Web Vitals, and the configuration that gets the hero loading fast.
Security that lives in the server, configuration and process rather than a plugin: file permissions, disabled file editing, user hygiene, edge filtering.
The part of WordPress deployment Git does not solve: moving database changes and media between staging and production without overwriting live orders.
Scheduled posts stuck, backups skipped, emails delayed: WP-Cron failing on managed hosting. Why it stops, how to diagnose it, and the server cron that fixes it.
A WordPress site broke after an update and a plugin is the likely cause. How to find which one using the error log, recovery mode and a staging copy.
Your host says PHP is out of date and WordPress wants updating. What the warnings mean for security and speed, what breaks, and the safe order to update in.
A repeatable ninety-minute audit for a WordPress theme someone else built: what to read first, what to grep for, and how to write up fix or replace.
How to structure WordPress custom post types and taxonomies so a redesign changes the templates and nothing else: registration, naming, fields and archives.
A Git deployment workflow for WordPress that a small agency can run: what goes in the repo, local to staging to production, database handling and rollback.
The handover document that lets another developer pick up a WordPress build without calling you: what to include, what to leave out and where it lives.
Moving a business site off Elementor to a custom block theme: extracting content, preserving URLs and metadata, the redirect map and the launch checklist.
When a block theme is the right foundation for a WordPress build and when a classic theme still wins: editor experience, performance, plugins and migration.
Why website updates should run on a staging copy before going live, what staging is, and how it prevents the broken-site emergencies we see most.
Why WordPress sites get slow over time: plugin bloat, unoptimised images and a swelling database, and how to find and fix each one.
Most small business WordPress sites have nobody responsible for them. What goes wrong in the first year, what maintenance involves, and how to make it a job.
The four caching layers a WordPress site can have, what each speeds up, which you need for a brochure site versus a store, and the setups that make it slower.
When ACF fields win, when native blocks win, and the hybrid most agency WordPress builds end up with. A decision framework for client-editable content.
WooCommerce checkout block placing the same order twice and charging cards twice? Here is why the second submit fires and the idempotency fix that holds.
WooCommerce Analytics dashboard showing zero orders after enabling HPOS? Here is why the lookup tables never rebuilt and the WP-CLI fix that restores it.
WordPress 7 Site Editor losing template part edits after Save? Here is why the revision write fails silently and the wp-config fix that brings saves back.
WooCommerce checkout block ignoring your validation hook? Here is why classic filters silently skip the block and the fix that actually blocks bad orders.
WordPress 6.9 Site Editor saving template edits as drafts and not publishing? Why the new capability check fires and the fix that restores live updates.
WordPress 7.0 block bindings returning empty values from ACF fields after upgrade? Here is why the source callback breaks and the registration fix that holds.
WooCommerce custom order status emails silently stopped after HPOS migration? Why the transition hook misses, and the fix that restores notifications.
Pattern overrides reverting on save after the WordPress 7 update? Here is why the bindings drop and the exact metadata fix that keeps overrides persistent.
WooCommerce orders complete but stock levels never drop? Here is why HPOS plus page caching hides the bug and the exact hook order that fixes it today.
WooCommerce 10.8 manual orders not reducing stock after a status switch to processing? Here is the hook rename and the one-line fix that restores it cleanly.
WooCommerce refund button greyed out on HPOS order edit screen after 10.8? Here is why the capability check fails and the action filter fix that works again.
WooCommerce cart block goes empty after a guest logs in mid-checkout? Here is what corrupts the session merge during login and the fix that restores items.
Custom order status registered with register_post_status disappears after WooCommerce HPOS migration. Here is why and the exact filter that brings it back.
WooCommerce block-based order emails silent after WordPress 7.0? Why the template loader breaks, and the fix to get transactional emails firing again.
WooCommerce 10.7 checkout block hiding your custom payment gateway? Here is why the Blocks integration class fails and the exact registration that fixes it.
WordPress 7.0 Pattern Overrides save once then revert on refresh? Here is why block bindings drop the override source and the fix that holds across reloads.
WooCommerce product gallery zoom and lightbox dead after WordPress 7? Here is the script enqueue change that silently breaks it and the fix that brings it back.
WooCommerce 10.x block emails sending {site_title} and {order_number} as literal curly-brace text? Here is why the placeholder pass is skipped and the fix.
WooCommerce HPOS bulk action shows 'Updated' but order status never changes? Here is why the legacy hook fires on the wrong table and the action fix that holds.
WordPress 7.0 forces the iframed block editor, so an old apiVersion block loses its styles and scripts for everyone. Here is the apiVersion 3 fix that holds.
WooCommerce throwing an invalid nonce error on add to cart after your page cache expires? Here is why cached nonces break and the ESI fix that actually holds.
WooCommerce Filter by Attribute block returning empty results on HPOS stores? Here is the index rebuild and lookup table fix that gets filters working again.
WordPress Cover Block Error 153 with video backgrounds is finally patched. Here is how I handle existing editors and safer fallbacks before rollout safely.
WooCommerce 10.7 my-account/orders and edit-address returning 404 after update? The rewrite priority moved. Here is the flush and registration fix that works.
WooCommerce 10.7 short description editor missing from product admin? HPOS shifts the meta box registration timing. Restore it with one filter and a hook.
WooCommerce HPOS order search by customer email returning empty? The legacy postmeta query is bypassed. Add a custom filter against the orders table.
WooCommerce Block Checkout custom field not saving to the order after submit? Register a Store API extension and server hook. Full working PHP and JS.
WordPress wp-cron not running on Kinsta, WP Engine, or SiteGround managed hosting? Here is the real server-side fix and how to verify scheduled events.
WooCommerce REST API returns 401 unauthorized after WordPress 6.9 update? Fix Basic Auth, application passwords, and Authorization header passthrough fast.
WooCommerce Action Scheduler jobs stuck in pending or in-progress? Clear the queue, fix the runner, and stop subscriptions and emails from silently breaking.
WooCommerce Cart block quantity stepper not responding to taps on iOS Safari mobile after the 10.5 update? Here is the touch event bug and a clean fix.
WooCommerce tax is not calculating in the Checkout Block after WooCommerce 10.7? Fix the address sync, tax class mapping, and Store API cache properly.
WooCommerce Action Scheduler tasks stuck on in-progress and never completing? Reset the claim, fix the cron, and unblock background jobs with working code.
WooCommerce Subscriptions Health Check helps surface missing renewals and broken auto-renewal states. Here is how I use it before revenue leaks compound.
WooCommerce Stripe checkout stuck in a 3D Secure authentication loop? Fix the redirect_url, payment_intent confirmation race, and webhook with code.
WooCommerce variations not saving in the admin product page after the WooCommerce 9.7 update? Fix the silent AJAX failure and nonce error with working code.
WooCommerce coupon not applying on the checkout block? Fix the silent validation failure, missing apply_coupon hook, and Store API rejection with code.
WooCommerce order confirmation email not sending after checkout? Fix the failed action scheduler, SMTP fallback, and the email template hook with code.
WooCommerce Checkout Block hiding shipping rates at the address step? Fix the broken store API call, session handle, and shipping zone match with code.
WordPress 6.9 update broke your site layout? Fix collapsed sections, missing block styles, and wrong fonts caused by the new on-demand block asset loader.
WooCommerce throwing "Sorry, this product cannot be purchased" at checkout? The eight real causes and the working fix for each, with WP-CLI debug code.
WooCommerce Subscriptions renewals failing silently after a Stripe or HPOS update? Fix the scheduled action, webhook gap, and SCA retry logic with code.
WooCommerce Add to Cart AJAX button spinning forever or not responding? Fix broken cart fragments, jQuery conflicts, and the page cache rules with code.
WooCommerce product filters slow on 5,000+ products? How to speed up layered navigation, attribute queries, counts and archive pages without guesswork.
WooCommerce Stripe webhook signature mismatch throwing 400 errors after the plugin update? Here is why it happens and how to fix it without disabling checks.
WordPress admin taking 3 to 10 seconds per page load? Oversized autoloaded options are the most common cause. Here is how to find and fix them safely.
WooCommerce 10.7 disables HPOS sync on read by default. If your plugins still write to posts tables, here is the fix path before order data drifts safely.
WordPress 7.0 real-time collaboration stops when legacy meta boxes are present. Here is the migration fix I would ship on plugin projects today safely.
Elementor 3.27 editor loading to a white screen after a plugin update? Here is the real cause and three working fixes with PHP and JS code snippets.
WooCommerce mini cart not refreshing after AJAX add-to-cart in block themes? Here is the exact cart_fragments fix with working code for WooCommerce 9.
WooCommerce Checkout Block showing no payment methods after 9.x? Fix missing Stripe, PayPal, and COD options by enabling block support and cache rules.
WooCommerce HPOS breaks custom order queries using WP_Query or postmeta. Here's the exact fix with working code for WooCommerce 8.7+ stores.
A step-by-step guide to optimizing WordPress performance. Caching, image optimization, CDN setup, and database cleanup that delivered 60% faster load times.
A practical comparison of Next.js and WordPress for business websites. Covering performance, SEO, cost, and when each platform makes the most sense.
Fixed price for a defined scope, on live sites, with a rollback path. Agencies and in-house teams welcome.
Hire me for WordPress