A linter is a colleague who never gets tired of the same conversation.
The boring fix
Escaping belongs at the point of output, where a reviewer can see it. When a value has been cleaned three functions earlier, nobody can tell by reading the template whether it is safe, and the next person to touch that line will not know either. We moved every escape next to its echo and the file got shorter and easier to trust.
The review took longer than the fix, and that is the right way round. Most of the time went on working out what the code was meant to do and who depended on it. Once that was written down, the change itself was four lines, a test and a note in the changelog that future maintainers will actually thank us for.

Maya Okafor Sep 21, 2026
Tried this on a client site this morning. The query count dropped straight away.
Noah Bennett Sep 26, 2026
I disagree slightly on the rollback plan, but the rest matches what we do.
Omar Haddad Oct 01, 2026
Thanks for showing the failed attempts as well. That is the useful part.
Lena Fischer Oct 06, 2026
Could you share the checklist as a plain text file? I would like to adapt it.
Felix Moreau Oct 12, 2026
We do something similar with WP-CLI in our deploy step and it has been solid.
Maya Okafor Oct 17, 2026
The point about small diffs is the one I keep having to repeat at work.
Lena Fischer Oct 22, 2026
Sending this to a colleague who is about to start a migration next week.
Noah Bennett Oct 27, 2026
Nice. One small correction: that hook fires earlier than the post suggests.
Felix Moreau Nov 01, 2026
This saved me an afternoon. The bit about testing the cold path first is going on the team wiki.