Find and replace a URL across every post
Link Updater is for the afternoon you move domains, switch to HTTPS, change an affiliate link or rename a product page and then realise the old URL is in four hundred posts. It has been on this site since July 2013. The 2.0.0 release is a rebuild for WordPress 7 and PHP 8 that adds the two things we always wished the original had: a dry run and an undo.
Dry run first
Open Tools, Link Updater. Type what to find and what to replace it with, tick which post types to include, choose whether drafts, pending and private posts count, and whether the match is case sensitive. Then run a dry run. It lists every post that would change, with the post type, where the match is (content, excerpt or a named meta key) and how many matches it found. Nothing is written. When the list looks right, run it for real.
Posts are processed in batches of 40 by ascending ID, so a large site does not hit the PHP time limit. We only exercised that batching with eleven posts in testing, so if you have fifty thousand, take a backup first and tell us how it went.
Post meta and page builders
Most replace tools either skip post meta or corrupt it. Page builders store their layouts as serialized PHP arrays in meta, and a serialized string carries its own length, so a plain replace that changes “http://” to “https://” breaks every value it touches. Link Updater never edits a serialized string directly. Each value is unserialized, searched recursively through arrays and objects, replaced, and stored again through update_post_meta(), which re-serializes it with correct lengths. In testing, a nested URL inside an array was replaced while an unrelated URL in the same array was left alone.
The keys _edit_lock, _edit_last and the plugin’s own backups are skipped.
Backups and undo
A live run first creates a run record (ID, time, find, replace, post count). For each post it changes, it stores a _link_updater_backup meta holding the original content, excerpt and every changed meta value before anything is written. The content_save_pre filters are removed during the write, so your content comes back byte-identical apart from the replacement itself. Undo restores every post carrying that run’s ID and marks the run as undone. The last 20 runs sit in the run history, each with its own undo button.
What it leaves alone
- Options, widgets and user data. This is deliberate; for a full database migration use a general search-replace tool
- Anything outside post content, excerpts and post meta
- Nothing leaves your server: administrators only, nonce-protected AJAX, no external requests
Our opinion: a tool that touches wp_options should be a different, scarier tool, and we would rather this one stay small enough that you trust it at three in the morning. Tested on WordPress 7.1.4 and PHP 8.3; needs WordPress 5.0 and PHP 7.4.






