Category: WordPress

  • Adding Caption & Lightbox to the Featured Image Block

    Adding Caption & Lightbox to the Featured Image Block

    Earlier this year I re-built this site using the Twenty Twenty-Five theme, finally adopting a block theme over the veritable Twenty Twenty classic theme I had been using. In this rebuild, one thing that I had trouble with is the featured image. In the Twenty Twenty theme, a caption is rendered under the featured image…

  • A Decade as a Core Committer: My WordPress Contribution History

    A Decade as a Core Committer: My WordPress Contribution History

    Next Tuesday is my 10-year anniversary of becoming a WordPress core committer back on May 20, 2015. This post is somewhat of a résumé for my contributions to the WordPress project. Now that I’m being laid off from Google, I’m hoping to continue contributing the majority of my time to WordPress at another company that…

  • Eagerly Prerender Key URLs with Speculative Loading in WordPress

    Eagerly Prerender Key URLs with Speculative Loading in WordPress

    Speculative Loading is coming to WordPress 6.8. The Speculation Rules API enables browsers to prefetch or prerender URLs so that pages can load much faster for users. Prefetching can reduce your TTFB to zero, and prerendering can reduce your LCP to zero: instant navigation! As explained in Prerender pages in Chrome for instant page navigations,…

  • Boosting Performance with Optimization Detective

    Boosting Performance with Optimization Detective

    At WordCamp Asia 2025 today in Manila, I gave a talk about the future for how performance optimizations can be implemented in WordPress today via the Optimization Detective feature plugin. This project has been the focus of my work for the past 1½ years on the WordPress Core Performance Team. Here’s my talk from the…

  • Ergonomically Running WP-CLI in wp-env

    Ergonomically Running WP-CLI in wp-env

    Something that has always annoyed me is how verbose it is to run WP-CLI commands in wp-env projects. For example, to list out all posts: The “npm run wp-env run cli” part I have to copy for each command, and I often forget the right order or miss a component. It gets worse when needing…

  • Repairing wp-env’s Testing Database

    Repairing wp-env’s Testing Database

    Sometimes when I interrupt PHP unit tests in a wp-env environment I end up getting the database in a bad state so that the next time I try to run tests I get: I then have to re-remember what I do to fix this every time, so I’m blogging it so I won’t have to…

  • Running the WordPress Plugin Directory Slurper

    Running the WordPress Plugin Directory Slurper

    As part of my work on the WordPress Core Performance Team, I need to do analyses on the plugins in the WordPress Plugin Directory. For example, in WordPress 6.3 we’re finally shipping first-party support for adding async and defer to scripts (a 13-year old ticket). In this case, the excellent WordPress Directory Searcher (WPdirectory) is…

  • Comparing Markup with PHPUnit

    Comparing Markup with PHPUnit

    For the upcoming WordPress 6.3 release, I’ve been contributing to the introduction of script loading strategies (i.e. the async and defer attributes). In the WP_Scripts class, all of the script tags are manually assembled with printf() & sprintf(), and as part of that work I wanted to start making use of helper functions that assemble…

  • Integrating with AMP Dev Mode in WordPress

    Integrating with AMP Dev Mode in WordPress

    tl;dr In v1.3 the AMP plugin for WordPress no longer has to remove the Admin Bar to keep pages valid AMP. The AMP plugin allows WordPress themes to be developed as usual and have their templates and stylesheets used to serve valid AMP pages. It does as much as possible to prevent serving invalid AMP…

  • AMP for JavaScripters

    AMP for JavaScripters

    Today at the JavaScript for WordPress Conference (#JSforWPConf), Felix Arntz and I gave a talk called AMP for JavaScripters about implementing interactive interfaces in AMP. Here’s the abstract we submitted for the talk: As we all know, adding JavaScript to a web page allows for dynamic page modifications. However, with that flexibility comes great responsibility:…