PostFix by Dipak Badaila gives administrators precise control over existing post text and publication dates.
Search for posts, select a page or individual posts, and continue selecting across pages. Enter Find and Replace with, choose the fields, and click Find Matches. Every result displays nearby text. Uncheck any occurrence that must stay unchanged. Click Preview Changes, review the before/after match contexts and per-post summary, then Confirm & Save Changes.
Preview is valid for 30 minutes. A saved post that changes between scan, preview and execution is skipped. After changing the search, fields, options or post selection, scan again. A change to the replacement or date requires a fresh preview.
Select posts, choose the date action and preview. All dates use the WordPress timezone shown on screen. “Current” captures time when the preview is created. A custom date can retain each post’s original time. Year-only mode always preserves month, day, hour, minute and second. Invalid leap days and ambiguous/nonexistent daylight-saving times are rejected.
PostFix does not change publication status to accommodate an incompatible date. Published posts cannot be moved into the scheduled range, and scheduled posts cannot be moved into the published range. When a date change would change the permalink (for example a /year/month/post-name/ structure), it is blocked. Use WordPress’s normal editing/publishing workflow when you intentionally want to change a URL or status.
In Gutenberg, open the Post settings and expand PostFix. In Classic Editor, use the PostFix meta box. Find, select, preview, then Apply to editor. Highlights live in the PostFix panel; the writing canvas is not modified to insert highlighting markup.
Editor changes remain in the normal editing workflow. Use WordPress Save / Update to publish; WordPress autosave/revisions continue normally. The panel offers an immediate Undo editor change as long as the editor has not subsequently changed. Native editor undo is also available. These buffer edits are not bulk history entries. WordPress may normalize whitespace/markup when its editor reserializes blocks or Classic Editor HTML. Bulk operations in the PostFix workspace preserve unselected source bytes and use durable PostFix history and recovery.
Confirmed operations run in batches of five posts. Keep the tab open until completion. If a connection fails or the tab closes, open History and choose Resume operation. A recovered write is compared to its stored intended result to avoid applying a replacement twice. Stop remaining work leaves already saved changes in place.
Undo Last Action is available for the latest operation that actually saved a post, for seven days, until another operation saves changes. Confirm undo in the dialog. Posts edited since the action are skipped to protect newer work. Undo restores content and published dates/status/slug from the snapshot; WordPress normally changes modified timestamps on this save. It cannot reverse emails, webhooks, cache purges or other effects triggered by another plugin’s save hooks.
History Details shows per-post outcomes and, while retained, a downloadable JSON recovery snapshot with the before and intended after fields. This is a manual recovery record, not an automatic import feature. If another plugin changes a post after a save hook, the result is reported for manual review rather than overwritten blindly.
Posts are queried a page at a time. The admin default is 20 and can be adjusted from 1–500 in Settings or changed instantly in the workspace. Sites with 10,000+ posts do not load all content into the browser. Explicit selections may include up to 500 posts in one operation; run additional operations for larger jobs.
Limits: ten posts per processing request; 1 MB total title/content/excerpt per post; 500 editable matches per post; 10,000 displayed matches per scan; 32 MB recovery payload per preview. Exceeding a limit produces an error or skipped post, without a partial edit to that post. Large per-post snapshots may require smaller selections.
There are two versioned, indexed tables using your site’s table prefix: postfix_actions and postfix_items. These support persistent previews, per-post recovery, resumable jobs and paginated history without loading large backup options on frontend requests. Posts themselves are saved with wp_update_post(). PostFix does not directly update the WordPress posts table.
Abandoned previews are pruned after one day. Recovery payloads expire after seven days or the next successfully saved action; activity summaries expire after 30 days. Cleanup is opportunistic during administrator requests (at most once daily), so physical deletion occurs on a subsequent admin visit. Running or undoing work is kept until resolved. Disabling history hides new completed summaries but retains the latest recovery record and active jobs.
Uninstall keeps settings and history by default. To remove PostFix data, enable “Delete PostFix settings, history and recovery data when the plugin is uninstalled” before deleting the plugin. Your posts are never removed or reverted by uninstall. Deactivation preserves data.
Dipak Badaila
https://dipakbadaila.com.np
Copyright (C) 2026 Dipak Badaila.
This program is free software: you may redistribute and/or modify it under the GNU General Public License, version 2 or (at your option) any later version.
This program is distributed without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. See LICENSE.txt for the license.